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

基于唯一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和ry
  • left_join():以df1为基础,基于ID匹配添加sex列,确保df1的所有行都被保留
  • 合并后的df1_with_sex仅包含原df1的date、ID列,以及新增的sex列,完全符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:15:12