合并数据集后生成匹配/未匹配ID标识列的R实现问题
在R中合并数据集后添加匹配状态标识列
你可以通过判断合并后数据集中来自两个原数据集的列是否为NA,来生成对应的匹配状态标识列,以下是两种实现方式:
基础R实现方式
先执行全连接合并,再通过嵌套ifelse判断NA状态生成标识列:
# 执行全连接合并 projects <- merge(projimpl, projects, by = "ProjectID", all = TRUE) # 添加匹配状态列(需替换为实际来自两个数据集的列名,比如projimpl的独有列或带.x后缀的列,projects的独有列或带.y后缀的列) projects$match_status <- ifelse( # 两个数据集都有对应匹配,即来自projimpl和projects的列都不为NA !is.na(projects$某列来自projimpl) & !is.na(projects$某列来自projects), "成功匹配的案例", ifelse( # projimpl中无对应ID,即来自projimpl的列为NA is.na(projects$某列来自projimpl), "因主数据集(projimpl)中无对应ID未匹配的案例", # projects中无对应ID,即来自projects的列为NA "因使用数据集(projects)中无对应ID未匹配的案例" ) )
dplyr包实现方式(更直观)
使用dplyr的full_join和case_when函数,逻辑更清晰:
library(dplyr) # 全连接合并并生成标识列 projects <- projimpl %>% full_join(projects, by = "ProjectID") %>% mutate( match_status = case_when( !is.na(某列来自projimpl) & !is.na(某列来自projects) ~ "成功匹配的案例", is.na(某列来自projimpl) ~ "因主数据集(projimpl)中无对应ID未匹配的案例", is.na(某列来自projects) ~ "因使用数据集(projects)中无对应ID未匹配的案例" ) )
注意事项
- 如果两个数据集有重名列,合并后
merge或full_join会自动给来自projimpl的列加.x后缀,来自projects的列加.y后缀,比如原列名为Budget,合并后会变成Budget.x(projimpl)和Budget.y(projects),直接用这些带后缀的列判断NA状态即可,无需找独有列。
内容的提问来源于stack exchange,提问作者Nader Mehri
相关产品推荐
相关产品推荐

