R data.table 测试列中的值是否在列表列中

问题描述 投票:0回答:1

假设我有以下数据.表

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 但没有成功。

有什么想法吗?

r data.table
1个回答
0
投票

按行分组和

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
© www.soinside.com 2019 - 2024. All rights reserved.