在data.table中按组获取所有对

问题描述 投票:0回答:1

我想按两列提取 data.table 组内的所有对。

我有以下代码:


dt = data.table(g1 = c(1, 1, 1, 2, 2, 2, 2),
                g2 = c(3, 3, 4, 5, 5, 6, 6),
                values = letters[1:7])

dt[, .(ind = combn(values, 2, paste0, collapse = "")), by = .(g1, g2)]

但这会返回错误

Error in combn(values, 2, paste0, collapse = "") : n < m

理想的结果是包含以下组的对象:

a,b
c
d,f
g,h

如果因为只有一个值而未包括 c,那对我来说并不是一个大问题。

这可以使用data.table吗?

提前致谢。

注意: 这个答案达到了我想要的一个水平。 使用 R 中的 data.table 按组生成所有 ID 对

r data.table
1个回答
0
投票

看起来您只想按组

list
查看值。

> dt[, .(ind = list(values)), by = .(g1, g2)]
      g1    g2    ind
   <num> <num> <list>
1:     1     3    a,b
2:     1     4      c
3:     2     5    d,e
4:     2     6    f,g

然后您可以对大于 1 或等于 2 的

lengths
进行子集化。

> dt[, .(ind = list(values)), by = .(g1, g2)][lengths(ind) > 1]
      g1    g2    ind
   <num> <num> <list>
1:     1     3    a,b
2:     2     5    d,e
3:     2     6    f,g
© www.soinside.com 2019 - 2024. All rights reserved.