使用列表列对 data.table 进行分组

2024-05-06

我有一个非常大的问题,循环遍历 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 的大小对于我的情况来说太大了。


我认为这可能有效:

a[, .(k = unlist(k)), by=.(i,j)][,sum(j),by=k]

   k V1
1: a  4
2: b  8
3: c  2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用列表列对 data.table 进行分组 的相关文章

随机推荐