假设我有以下数据.表
dx <- data.table(x=c(1,2,3),tet=list(c(1,2,3),c(4,5),c(3)))
x tet
1: 1 1,2,3
2: 2 4,5
3: 3 3
我想创建一个变量
test
来检查x的每个元素是否在tet
中对应的集合中。
我想得到
x tet test
1: 1 1,2,3 TRUE
2: 2 4,5 FALSE
3: 3 3 TRUE
我已经尝试过了
dx[, test:= x %in% tet]
x tet test
1: 1 1,2,3 FALSE
2: 2 4,5 FALSE
3: 3 3 TRUE
但是第一行当然失败了,因为它将
1
与 c(1,2,3)
进行比较,而第二行给了我一个错误的 FALSE
。
我也尝试过使用 lapply 和 unlisting 但没有成功。
有什么想法吗?
按行分组和
unlist
ing 在这种情况下应该有效
library(data.table)
dx[, test := x %in% unlist(tet), by=1:nrow(dx)]
dx
x tet test
<num> <list> <lgcl>
1: 1 1,2,3 TRUE
2: 2 4,5 FALSE
3: 3 3 TRUE