You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R data.table判断列值是否存在于对应列表列中

解决data.table中逐行判断值是否存在于对应列表列的问题

原始数据

先创建示例data.table:

library(data.table)
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

问题出在x %in% tet是将整个x向量与整个tet列表做批量匹配,而非逐行对应比较每个x值和其所在行的tet列表。

正确实现方法

以下是几种可行的解决方案:

方法1:用mapply逐行匹配

利用mapply对每行的x和tet做对应匹配:

dx[, test := mapply(function(val, lst) val %in% lst, x, tet)]

方法2:借助data.table的by = .I逐行处理

通过by = .I实现逐行操作,确保每行的x只和本行的tet列表比较:

dx[, test := x %in% tet[[1]], by = .I]

方法3:使用purrr包的map2_lgl

如果习惯tidyverse工具链,也可以用purrr的map2_lgl生成逻辑判断结果:

library(purrr)
dx[, test := map2_lgl(x, tet, ~ .x %in% .y)]

运行任意一种方法后,都会得到符合预期的结果。

内容的提问来源于stack exchange,提问作者Zentaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:32:38