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

在R语言中判断列表列内是否存在指定值的问题

问题解析与解决方法

为什么%in%不生效?

%in%(以及is.element())是向量级别的匹配工具,它会把左侧的整个A列向量和右侧的整个B列列表对象做全局匹配,而非逐行检查每行的A值是否存在于该行对应的B向量中。你的代码里,A的单个值并没有出现在B列的顶层集合里,所以所有行都返回0。

解决方法

方法1:用rowwise()实现逐行匹配

通过rowwise()让dplyr按行处理数据,此时每行的A是单个值,B是对应行的向量,再用%in%就能正确匹配:

library(dplyr)

df %>%
  rowwise() %>%
  mutate(C = as.integer(A %in% B)) %>%
  ungroup()

(注:as.integer()可以替代ifelse(...,1,0),逻辑值TRUE会转成1,FALSE转成0)

方法2:用purrr的映射函数逐行处理

利用purrr::map2_int对每行的A和B进行配对检查,直接返回整数结果:

library(dplyr)
library(purrr)

df %>%
  mutate(C = map2_int(A, B, ~as.integer(.x %in% .y)))

方法3:基础R实现(无需额外包)

用apply逐行遍历数据框,自定义函数完成检查:

df$C <- apply(df, 1, function(row) as.integer(row[1] %in% row[2]))

执行以上任意一种方法后,都能得到你期望的结果:

ABC
'1'c('1', '3', '9')1
'2'c('1', '2', '5')1
'3'c('4', '5')0
'4'c('1', '2', '5')0
'5'c('1', '2', '5')1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:11:20