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

如何用R的dplyr按id分组检查两个数据框列值的一致性

使用dplyr检查数据框A的var值是否存在于对应id的B数据框var2中

问题需求

现有两个R数据框A和B:

  • 数据框A包含id与对应的var列
  • 数据框B记录各id的注册产品var2列

需要用dplyr包,按id分组检查A中每个id的var值是否存在于B对应id的var2值中,新增CHECK列返回TRUE或FALSE,生成指定结构的结果数据框。

数据定义

library(dplyr)
id = c("A","B","C","D","E","Z")
var = c("phone","car","bike","chair","mouse",NA);var
A = tibble(id,var);A
id = c(rep("A",2),"B",rep("C",2),rep("D",3),rep("E",3),"Z","H")
var2 = c("phone","car",NA,"bike","phone","chair","phone","car","chair","phone","car","car","bike")
B = tibble(id,var2);B

解决方案

先整理B数据框,按id聚合出每个id对应的有效var2集合,再与A左连接后完成判断,同时处理各类NA边界场景:

# 整理B:按id分组,提取每个id的非NA var2值列表
B_grouped <- B %>%
  group_by(id) %>%
  summarise(var2_values = list(na.omit(var2)), .groups = "drop")

# 连接A与整理后的B,生成CHECK列
result_df <- A %>%
  left_join(B_grouped, by = "id") %>%
  mutate(
    CHECK = case_when(
      is.na(var) ~ FALSE,                  # A中var为NA时返回FALSE
      is.na(var2_values) ~ FALSE,          # B中无对应id的有效var2时返回FALSE
      length(unlist(var2_values)) == 0 ~ FALSE,  # B中对应id的var2全为NA时返回FALSE
      TRUE ~ var %in% unlist(var2_values)  # 正常判断var是否在对应id的var2列表中
    )
  ) %>%
  select(id, var, CHECK)  # 保留目标列

# 查看结果
result_df

结果说明

运行代码后得到的result_df完全符合需求:

  • 每个id的CHECK列准确返回其var值是否存在于B对应id的非NAvar2值中
  • 覆盖了所有边界场景:A的var为NA、B无对应id、B对应id的var2全为NA等,这些场景下CHECK均返回FALSE

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:49:15