R语言数据框合并列:用X3值替换X2中的NA
没问题,这是数据清洗里非常常见的需求,我给你两种实用的解法,你可以根据自己的代码风格选择:
首先,先把你提到的示例数据框写出来,方便你直接测试:
df <- data.frame( X1 = 1:6, X2 = c(123, 125, 210, NA, 214, NA), X3 = c(NA, 125, NA, 212, 213, 225) )
方法一:Base R 原生实现
用基础包的ifelse()函数就能搞定,逻辑很直观:判断X2的每个值是否为NA,如果是就取X3对应位置的值,否则保留X2原来的值,最后删掉X3列即可:
# 替换X2中的NA为X3对应值 df$X2 <- ifelse(is.na(df$X2), df$X3, df$X2) # 移除不需要的X3列 df$X3 <- NULL
方法二:tidyverse/dplyr 简洁实现
如果你平时习惯用tidyverse系列工具,dplyr::coalesce()函数就是专门为这种场景设计的——它会按顺序返回每个位置上第一个非NA的值,用起来特别清爽:
library(dplyr) # 处理数据并生成新的干净数据框 df_cleaned <- df %>% mutate(X2 = coalesce(X2, X3)) %>% # 用X3填充X2的NA select(-X3) # 移除X3列
两种方法运行后都会得到你想要的结果:
X1 X2 1 1 123 2 2 125 3 3 210 4 4 212 5 5 214 6 6 225
内容的提问来源于stack exchange,提问作者MPopp
相关产品推荐
相关产品推荐

