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

如何判断R语言DataFrame中某列值是否存在于另一列的列表中?

检测DataFrame普通列值是否存在于对应行的列表列中

问题原因

你原代码中使用%in%的方式有误:df$search.for是列表类型的列,df$letters.col %in% df$search.for会把整个search.for列当成一个整体匹配,而非逐行检查每个letters.col值是否存在于对应行的search.for列表内,因此得到全为Nok的错误结果。

解决方案

以下是几种可行的实现方式:

方法1:tidyverse风格(purrr::map2_lgl)

利用map2_lgl逐行配对letters.col和search.for的元素,返回逻辑匹配结果后转换为目标字符串:

library(tidyverse)

numbers.col <- c(1,2,3)
letters.col <- c("a", "b", "c")
search.for <- list("a","b")

df <- data.frame(numbers.col, letters.col)
df$search.for <- list(search.for)

# 执行匹配
df <- df %>%
  mutate(result = if_else(map2_lgl(letters.col, search.for, ~ .x %in% .y), "Ok", "Nok"))

print(df)

执行后输出:

numbers.col letters.col search.for result
1           1           a       a, b    Ok
2           2           b       a, b    Ok
3           3           c       a, b    Nok

方法2:rowwise()分组处理

通过rowwise()将数据框按行分组,在每行内展开列表列并检查匹配:

df <- df %>%
  rowwise() %>%
  mutate(result = if_else(letters.col %in% unlist(search.for), "Ok", "Nok")) %>%
  ungroup()

方法3:基础R实现

使用apply逐行遍历数据框,完成匹配判断:

df$result <- apply(df, 1, function(row) {
  if(row["letters.col"] %in% unlist(row["search.for"])) "Ok" else "Nok"
})

内容的提问来源于stack exchange,提问作者T.B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:32:48