我有一个非常大的问题,循环遍历 data.table 来做我想做的事情太慢了,所以我试图绕过循环。假设我有一个 data.table 如下:
a <- data.table(i = c(1,2,3), j = c(2,2,6), k = list(c("a","b"),c("a","c"),c("b")))
> a
i j k
1: 1 2 a,b
2: 2 2 a,c
3: 3 6 b
我想根据 k 中的值进行分组。所以像这样:
a[, sum(j), by = k]
现在我收到以下错误:
Error in `[.data.table`(a, , sum(i), by = k) :
The items in the 'by' or 'keyby' list are length (2,2,1). Each must be same length as rows in x or number of rows returned by i (3).
我正在寻找的答案是首先对 k 列中具有“a”的所有行进行分组并计算 sum(j),然后计算具有“b”的所有行,依此类推。所以期望的答案是:
k V1
a 4
b 8
c 2
有什么提示如何有效地做到这一点吗?我无法通过重复行来融化 K 列,因为 data.table 的大小对于我的情况来说太大了。