我有一个非常大的问题,并通过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
Run Code Online (Sandbox Code Playgroud)
我想根据k中的值进行分组.所以像这样:
a[, sum(j), by = k]
Run Code Online (Sandbox Code Playgroud)
现在我收到以下错误:
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).
Run Code Online (Sandbox Code Playgroud)
我正在寻找的答案是首先将列k中具有"a"的所有行分组,然后计算sum(j),然后计算所有具有"b"的行,依此类推.所以答案是:
k V1
a 4
b 8 …Run Code Online (Sandbox Code Playgroud)