基本上,我有一个data.table,它有一个列表列,其中包含任何类型的向量条目,并且想知道一行的任何条目是否存在于所列向量的任何其他行中。并在最后得到一个带有分组变量的列。
它的工作原理是
lapply()
和
by = row.names()
,但当行数增加时,它当然会变得非常慢。
这个
paste()
目的是获取一个字符串,该字符串具有当前行的所有组合可能性,以便以后按其分组。
还有更优雅(更快)的吗?解决方案?
library(data.table)
ex_dat <- data.table(
ls_col = list(
c(1,2,3),
c(3,4),
c(3,4,5,6,7,8),
c(5)
)
)
ex_dat[, grp_string := list(list(paste(unique(unlist(
lapply(ex_dat[['ls_col']], function(x) {
if (any(unlist(ls_col) %in% x)){
x
}
}))), collapse = " | "))),
by = row.names(ex_dat)]
当前输出和所需输出(分组变量可能有所不同):
> ex_dat
ls_col grp_string
1: 1,2,3 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
2: 3,4 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
3: 3,4,5,6,7,8 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
4: 5 3 | 4 | 5 | 6 | 7 | 8