基于唯一ID为行数不等的两个DataFrame仅合并单个sex列
解决方案
你只需要先从df2中提取出需要的ID和sex列,再与df1做左连接即可,这样只会给df1添加目标列,不会带入多余的rt和ry列。具体代码如下:
library(tidyverse) # 你的原始数据生成代码(保留以便直接运行) date = c("2015-05-01","2015-05-04","2015-05-05","2015-07-01","2015-07-02","2015-07-05","2015-07-06", "2015-05-01","2015-05-04","2015-05-05","2015-05-27","2015-05-28","2015-06-05","2015-06-06", "2015-05-01","2015-05-02","2015-05-03","2015-05-04","2015-05-05","2015-05-06","2015-05-07") ID = c("0-10","0-10","0-10","0-10","0-10","0-10","0-10", "0-2","0-2","0-2","0-2","0-2","0-2","0-2", "0-8","0-8","0-8","0-8","0-8","0-8","0-8") df1 = data.frame(date,ID) df1$date = as.Date(df1$date) # 第二个DataFrame ID = c("0-10", "0-2","0-8","0-4","5-0") sex = c("M","F","Unknown","F","F") rt = c("S", "S", "H", "H", "S") ry = c("2015", "2016","2015", "2015", "2016") df2 <- data.frame(ID, sex, rt, ry) df2$sex = as.factor(df2$sex) # 核心操作:提取df2的必要列后合并 df1_with_sex <- df1 %>% left_join(df2 %>% select(ID, sex), by = "ID") # 查看结果 head(df1_with_sex)
说明
select(ID, sex):从df2中仅保留需要的两列,过滤掉rt和ryleft_join():以df1为基础,基于ID匹配添加sex列,确保df1的所有行都被保留- 合并后的
df1_with_sex仅包含原df1的date、ID列,以及新增的sex列,完全符合你的需求
内容的提问来源于stack exchange,提问作者Rnoobie
相关产品推荐
相关产品推荐

