我有一个像这样的data.table:
dt=data.table(freq=c(4,3,2,1),elements=list(c('a','b','c'),
c('a','d'),
c('b','d'),
c('b','d','c','e')))
freq elements
1: 4 a,b,c
2: 3 a,d
3: 2 b,d
4: 1 b,d,c,e
我需要每行中的元素只是该行中元素与该行之前集合的所有元素的联合之间的设置差异。通过这种方式我会得到类似的东西:
freq elements
1: 4 a,b,c
2: 3 d
3: 2 NA
4: 1 e
我可以用一个for来对所有元素进行分组,直到i-1并且只获得设置差异,但我真的想知道如何以矢量化的方式进行,如果可能的话。
谢谢你们!答案 0 :(得分:8)
假设您的最后一行dt
中有'e',freq
是唯一的(如果没有,请创建唯一索引,或使用行):
dt[, .(els = elements[[1]]), by = freq][
, .(freq = freq[1]), by = els][
, .(filtered = list(els)), by = freq][
dt, on = 'freq']
# freq filtered elements
#1: 4 a,b,c a,b,c
#2: 3 d a,d
#3: 2 NULL b,d
#4: 1 e b,d,e