【问题标题】:Data table aggregation and using toString()数据表聚合和使用 toString()
【发布时间】:2017-09-23 03:10:42
【问题描述】:

我试图创建一个函数,在该函数中我基于一列聚合数据表值,但我无法在 toString() 中为列名传递参数。下面的例子可以更好地展示它:

t1 <- data.table(P = c("a", "b", "c", "d", "a", "b"), Q = 
c("1","2","3","4","5","6"))

t1[ ,toString(Q), by = P] # this works
t1[ ,toString(colnames(t1)[2]), by = P] #  this does not give me the desired result

我得到以下结果:

   P V1
1: a  Q
2: b  Q
3: c  Q
4: d  Q

与预期相比:

   P   V1
1: a 1, 5
2: b 2, 6
3: c    3
4: d    4

我尝试使用 noquotes() 删除引号,但对我来说没有任何效果。 谁能指出我可能在哪里犯了错误?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以使用get来返回值

    t1[ , toString(get(colnames(t1)[2])), by = P]
    #   P   V1
    #1: a 1, 5
    #2: b 2, 6
    #3: c    3
    #4: d    4
    

    eval/as.symbol

    t1[, toString(eval(as.symbol(names(t1)[2]))), by = P]
    

    或者标准方法是在.SDcols中指定

    t1[, toString(.SD[[1]]), by = P, .SDcols = names(t1)[2]] 
    

    【讨论】:

    • 非常感谢!但是,当我使用 noquote() 时有什么区别?
    • 如果我有一个字符串怎么办。我打算创建一个将列名作为参数传递的函数。
    猜你喜欢
    • 2015-03-24
    • 2015-10-14
    • 2017-05-12
    • 2014-06-25
    • 2012-03-28
    • 2017-06-02
    • 2015-06-28
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多