使用R中的data.table包对列进行求和 - 得到GForce sum(gsum)错误

时间:2015-09-11 16:07:31

标签: r data.table

这是一个data.table:

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

关于这个data.table我试图: 1)按月和年分配所有列值 2)在返回的子集中,我想排除Date列

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

setkey(DT, month, year)

现在我正在运行此命令以实现步骤1和步骤1中列出的操作。 2以上:

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

我从SO帖子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)

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

任何帮助将不胜感激。 感谢

1 个答案:

答案 0 :(得分:3)

错误说你不能对一个角色求和,所以我会说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