如何在R语言中合并数据表并填充对应ID的年龄值?
用R实现按ID填充有效年龄的方法
先构造示例数据(可直接复制运行测试):
df1 <- data.frame( ID = c(1,1,2,2,2), running_time = c(10,2,1,3,4) ) df2 <- data.frame( ID = c(1,1,2,2,2), age = c(20, NA, 30, NA, NA) )
以下是两种常用实现方式:
方法一:Base R 原生实现
无需额外安装包,步骤清晰:
- 从
df2中提取每个ID对应的唯一有效年龄(去除NA和重复项) - 通过ID匹配合并到
df1中
# 提取每个ID的有效年龄参考表 age_ref <- na.omit(df2)[!duplicated(na.omit(df2)$ID), ] # 左连接合并,保留df1的所有行 result <- merge(df1, age_ref, by = "ID", all.x = TRUE)
方法二:tidyverse包(dplyr)实现
管道语法更直观,适合习惯现代R语法的用户:
- 首次使用需先安装包,后续直接加载即可
- 处理
df2得到每个ID的有效年龄 - 左连接到
df1
# 首次使用执行安装命令 # install.packages("tidyverse") library(dplyr) # 生成年龄参考表 age_ref <- df2 %>% filter(!is.na(age)) %>% # 过滤NA值 distinct(ID, age) # 保留每个ID对应的唯一年龄 # 左连接合并 result <- df1 %>% left_join(age_ref, by = "ID")
运行任意一种方法后,result即为你需要的输出结果。
内容的提问来源于stack exchange,提问作者Moon Lee
相关产品推荐
相关产品推荐

