【发布时间】:2018-05-30 15:57:10
【问题描述】:
基本上,我有一个 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
【问题讨论】:
-
你在这个例子中寻找的结果是什么?
-
我添加了当前输出以显示它的外观。
标签: r data.table