我想按两列提取 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 对
看起来您只想按组
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