【问题标题】:aggregate data programmatically in data.table在 data.table 中以编程方式聚合数据
【发布时间】:2020-09-17 23:47:01
【问题描述】:

我希望能够在循环中使用 data.table 来聚合一些数据。以下代码有效:

mydata = data.table(a = rnorm(10), b = rnorm(10))
sum = list()
sum$a = mydata[, list(sum_a = sum(a))]
sum$b = mydata[, list(sum_b = sum(b))]

但是,下面的代码失败了:

sumlist = list()
for (var in c('a','b')) {
   sumlist[[var]] = mydata[, list(paste0('sum_', var) = sum(get(var)))]
}

我知道问题在于 data.table 括号内对 list() 的调用内容,但我不确定如何指定它。大多数现有问题与使用“:=”分配新变量有关,上述代码的一个版本确实有效。请指教。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    = 的左侧命名是行不通的。我们可以使用setNames

    sumlist = list()
    for (var in c('a','b')) {
        sumlist[[var]] = mydata[, setNames(list(sum(get(var))), paste0('sum_', var))]
     }
    

    -输出

    sumlist
    #$a
    #       sum_a
    #1: 0.0328273
    
    #$b
    #         sum_b
    #1: -0.04686505
    

    【讨论】:

    • akrun 无法回答的 data.table 毫无疑问。众所周知。
    猜你喜欢
    • 2019-10-15
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多