如何用另一DataFrame替换不同列的不同值并合并数据?
问题描述
现有两个DataFrame:
df1:
v1 v2 v3 v4 RDA NA ILL NA OPCS NA NA NA OJK BR ILL PE
df2:
v1 v2 v3 v5 RDA COL ILL P3 OPCS BR ILL P2
需求:用df2中的值替换df1对应列的缺失值,同时合并df2的v5列,得到如下结果:
v1 v2 v3 v4 v5 RDA COL ILL NA P3 OPCS BR ILL NA P2 OJK BR ILL PE NA
此前尝试inner_join方法,得到含重复列的结果,不符合预期,寻求解决办法。
解决方案
用R语言的dplyr包可以实现需求,步骤如下:
- 先加载依赖包(未安装则先执行安装命令):
install.packages("dplyr") library(dplyr)
- 执行合并与缺失值填充:
merged_df <- df1 %>% # 以v1为匹配键,保留df1所有行进行左连接 left_join(df2, by = "v1", suffix = c(".x", ".y")) %>% # 用df2的v2/v3值填充df1对应列的缺失值 mutate(v2 = coalesce(v2.x, v2.y), v3 = coalesce(v3.x, v3.y)) %>% # 移除临时重复列,调整为目标列顺序 select(v1, v2, v3, v4, v5)
逻辑说明
left_join确保保留df1的全部行(包括未在df2中匹配到的OJK行),同时关联df2的对应数据coalesce函数优先取df1的非缺失值,若为NA则替换为df2的对应值,正好满足缺失值替换需求- 最后通过
select整理列顺序,清除连接产生的临时重复列(如v2.x、v3.y等)
运行后得到的merged_df即为目标结果。
内容的提问来源于stack exchange,提问作者Johanna Ramirez
相关产品推荐
相关产品推荐

