【发布时间】:2016-07-31 15:16:28
【问题描述】:
我有一个非常大的问题,循环遍历 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 的大小对于我的情况来说太大了。
【问题讨论】:
-
这能回答你的问题吗? R data.table - group by column includes list。我认为这个问题是重复的,但它也提供了更好、更多的答案。
标签: r data.table