r - 在 R 中使用 data.table 包对列求和 - 获取 GForce sum(gsum) 错误

标签 r data.table

这是一个数据表:

Date     colA  colB  colC  .... month    year
01/23/15  2323  2323 2323        january  2015
.......

在这个 data.table 上,我试图: 1)按月然后按年对所有列值求和 2)在返回的子集中我想排除日期列

我在 DT 上设置的按键如下:

setkey(DT, month, year)

现在我正在运行这个命令来实现上面第 1 步和第 2 步中列出的操作:

DT[ ,lapply(.SD, sum, na.rm=TRUE), by=.(month , year), .SDcols= 2:(length(colnames(DT))-2) ]

我从这个 SO post here 得到了上面的例子.

当我运行它时......我收到以下错误:

Error in gsum(`colA`, na.rm = TRUE) : 
  Type 'character' not supported by GForce sum (gsum). Either add the prefix base::sum(.) or turn off GForce optimization using options(datatable.optimize=1)

我不确定这意味着什么以及如何调试它......

如有任何帮助,我们将不胜感激。 谢谢

最佳答案

错误说你不能对一个字符求和,所以我会说 colA 是一个字符。您可以使用 str(DT) 查看数据中变量的类型。

我创建了一个类似的数据集并使用了您提供的代码,它对我有用:

library(data.table)
DT = data.table("Date" = c('01/23/15', '01/24/15', '02/23/15', '02/24/15'),
        "colA" = c(2323, 1212, 1234, 2345),
        "colB" = c(2323, 1112, 1134, 2245),
        "colC" = c(2323, 1012, 1434, 2445),
        "month" = c('january', 'january', 'february', 'february'),
        "year" = c(2015, 2015, 2015, 2015)
)

setkey(DT, month, year)

DT[ ,lapply(.SD, sum, na.rm=TRUE), by=.(month , year), .SDcols= 2:(length(colnames(DT))-2) ]
      month year colA colB colC
1: february 2015 3579 3379 3879
2:  january 2015 3535 3435 3335

关于r - 在 R 中使用 data.table 包对列求和 - 获取 GForce sum(gsum) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32527704/

相关文章:

r - 用 R 在对数尺度上转换可变密度

javascript - 使用 R 抓取带有表单和 JS 的网站

r - data.table 通过函数内的引用赋值

r - 数据表按组滚动连接

r - Pheatmap:annotation_colors[[colnames(annotation)[i]]]中的错误:下标越界

R:计算列中值的分数,按另一列中的值分组

R函数等于excel CHIINV

r - 使用R的data.table用NA替换不可能的值

r - 在 data.table (R) 中按组高效生成随机变量

r - 如何在特定列的data.table中将字符转换为数字?