R语言新手求助:基于匹配MRN从两个数据集创建新数据集
解决R语言中基于匹配MRN创建新数据集的问题
嘿,作为R语言新手,这个需求其实很常见,我来一步步帮你搞定!首先咱们先把你的示例数据还原成可运行的R代码,这样你可以直接跟着试:
# 构造第一个数据集(对应你说的第一个数据集) df1 <- data.frame( MRN = c(222, 345, 555, 888, 675), Age = c(50, 64, 75, 56, 52), Status = c("likely", "likely", "unknown", "likely", "unknown") ) # 构造第二个数据集(对应你说的第二个数据集) df2 <- data.frame( MRN = c(222, 446, 555, 888, 678), Age = c(50, 35, 75, 56, 48), Status = c("likely", "unknown", "unknown", "likely", "unknown") )
第一步:获取两个数据集中匹配的MRN
你已经用到了intersect()函数,这步是对的,咱们完善一下:
# 提取两个数据集共有的MRN matched_mrn <- intersect(df1$MRN, df2$MRN) # 查看结果,应该是222、555、888 print(matched_mrn)
第二步:基于匹配MRN创建新数据集
这里给你两种常用方法,选你顺手的就行:
方法1:用Base R(不用额外装包)
- 从单个数据集中提取匹配的行:
# 从df1中提取匹配MRN的所有行 df1_matched <- subset(df1, MRN %in% matched_mrn) # 从df2中提取匹配MRN的所有行 df2_matched <- subset(df2, MRN %in% matched_mrn)
- 如果想把两个数据集的匹配行合并成一个(保留所有字段),用
merge():
# 按MRN合并,给重复字段加后缀区分来源 combined_matched <- merge(df1, df2, by = "MRN", suffixes = c("_df1", "_df2"))
方法2:用dplyr包(更直观,适合新手)
如果你还没装dplyr,先安装并加载:
install.packages("dplyr") library(dplyr)
- 提取单个数据集的匹配行:
df1_matched <- df1 %>% filter(MRN %in% matched_mrn) df2_matched <- df2 %>% filter(MRN %in% matched_mrn)
- 一步到位合并匹配行(用
inner_join自动只保留共有的MRN):
# inner_join会直接返回两个数据集中MRN匹配的行,无需先找intersect combined_matched <- inner_join(df1, df2, by = "MRN")
最后:检查结果
你可以用这些命令查看生成的新数据集是否符合预期:
# 查看前几行 head(combined_matched) # 打开可视化界面查看(RStudio可用) View(combined_matched)
内容的提问来源于stack exchange,提问作者kmardinian
相关产品推荐
相关产品推荐

