我有一个非常大的问题,通过循环遍历数据表来实现我的目标速度太慢了,因此我正在尝试绕过循环。假设我有一个如下所示的数据表:
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"的行分组,并计算j的总和,然后再将所有"k"列中有"b"的行分组,以此类推。因此期望的答案是:
k V1
a 4
b 8
c 2
有什么有效的方法可以做到这一点吗?我不能通过重复行来融合列K,因为数据表的大小对我的情况来说太大了。