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

如何在R中按行对比数据框嵌套列表并查找缺失值?

解决逐行对比列表列并找出缺失值的问题

你之前的方法失效,是因为setdiff()和%in%默认对整列的列表集合运算,而非逐行处理每个分组的两个列表。下面提供几种可行的实现方式:

1. 构造示例数据集

先创建匹配需求的示例数据,方便验证效果:

df <- data.frame(
  Group = c(1, 2, 3),
  Expected = I(list(c(1,2,3), c(4,5,6), c(7,8,9))),
  Observed = I(list(c(1,3), c(4,6), c(7)))
)

2. Base R 逐行处理方案

用apply()按行遍历数据集,对每行的Expected和Observed列表单独执行setdiff():

df$Missing <- apply(df, 1, function(row) setdiff(row$Expected, row$Observed))

3. dplyr 逐行处理方案

如果习惯tidyverse语法,用rowwise()开启逐行模式后执行mutate:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(Missing = list(setdiff(Expected, Observed))) %>%
  ungroup()

4. purrr 对应元素处理方案

利用purrr::map2()直接对两列的列表元素一一配对执行setdiff(),代码更简洁:

library(purrr)

df$Missing <- map2(df$Expected, df$Observed, setdiff)

验证结果

执行任意一种方法后,查看数据集会得到预期的Missing列:

print(df)
#   Group Expected Observed Missing
# 1     1 1, 2, 3    1, 3       2
# 2     2 4, 5, 6    4, 6       5
# 3     3 7, 8, 9        7    8, 9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:16:06