R语言如何按ID关联数据集替换NA值并合并多匹配项
实现方案
以下提供R语言和Python两种常用数据处理工具的实现方法:
R语言实现
你可以用dplyr包快速完成需求,示例代码如下:
# 加载依赖包 library(dplyr) # 1. 预处理查找表,按ID分组拼接同ID的State值 lookup_agg <- lookup_df %>% group_by(ID) %>% summarise(State_agg = paste(State, collapse = ",")) # 2. 匹配并替换主表的NA值 result <- main_df %>% left_join(lookup_agg, by = "ID") %>% mutate(State = ifelse(is.na(State), State_agg, State)) %>% select(-State_agg)
如果不想引入第三方包,也可以用base R实现:
# 聚合查找表 lookup_agg <- aggregate(State ~ ID, lookup_df, paste, collapse = ",") # 匹配替换NA na_idx <- is.na(main_df$State) main_df$State[na_idx] <- lookup_agg$State[match(main_df$ID[na_idx], lookup_agg$ID)]
注:上述代码中
main_df对应你的第一个数据集,lookup_df对应第二个State查找表。
Python实现
用pandas实现的代码如下:
import pandas as pd # 1. 聚合查找表,拼接同ID的State lookup_agg = lookup_df.groupby('ID')['State'].agg(','.join).reset_index(name='State_agg') # 2. 合并主表并替换NA result = main_df.merge(lookup_agg, on='ID', how='left') result['State'] = result['State'].where(result['State'].notna(), result['State_agg']) result = result.drop('State_agg', axis=1)
注:上述代码中
main_df对应你的第一个数据集,lookup_df对应第二个State查找表。
内容的提问来源于stack exchange,提问作者Science11
相关产品推荐
相关产品推荐

