如何在R中比较数据框X中同行ID是否属于数据框Y的同一组?
双ID组匹配判断问题
现有数据结构
数据框X
ID1 ID2 1 5 1 2 1 3 2 3 3 4
数据框Y
ID GROUP 1 5 2 5 3 6 4 6
需求
判断数据框X中每行的ID1与ID2是否在数据框Y中属于同一GROUP,期望输出结果如下:
ID1 ID2 SAME.GROUP 1 2 YES 2 3 NO 3 4 YES
解决方案
R语言(dplyr包)实现
- 先将数据框X与Y关联,分别获取
ID1和ID2对应的分组 - 对比两个分组是否一致,生成结果列
library(dplyr) # 构建示例数据 X <- data.frame(ID1 = c(1,1,1,2,3), ID2 = c(5,2,3,3,4)) Y <- data.frame(ID = c(1,2,3,4), GROUP = c(5,5,6,6)) # 关联ID1对应的分组 X <- X %>% left_join(Y, by = c("ID1" = "ID")) %>% rename(GROUP1 = GROUP) # 关联ID2对应的分组 X <- X %>% left_join(Y, by = c("ID2" = "ID")) %>% rename(GROUP2 = GROUP) # 判断是否同组并生成结果列,最后保留需要的字段 X <- X %>% mutate(SAME.GROUP = ifelse(GROUP1 == GROUP2, "YES", "NO")) %>% select(ID1, ID2, SAME.GROUP) # 输出结果 print(X)
Python语言(Pandas库)实现
- 通过两次关联操作,分别获取
ID1和ID2在Y中的分组 - 逐行对比分组是否相同,生成结果列
import pandas as pd # 构建示例数据 X = pd.DataFrame({"ID1": [1,1,1,2,3], "ID2": [5,2,3,3,4]}) Y = pd.DataFrame({"ID": [1,2,3,4], "GROUP": [5,5,6,6]}) # 关联ID1对应的分组 X = X.merge(Y, left_on="ID1", right_on="ID", how="left").rename(columns={"GROUP": "GROUP1"}) # 关联ID2对应的分组 X = X.merge(Y, left_on="ID2", right_on="ID", how="left").rename(columns={"GROUP": "GROUP2"}) # 判断是否同组并生成结果列,筛选目标字段 X["SAME.GROUP"] = X.apply(lambda row: "YES" if row["GROUP1"] == row["GROUP2"] else "NO", axis=1) X = X[["ID1", "ID2", "SAME.GROUP"]] # 输出结果 print(X)
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

