在R语言数据框中实现条件替换:将R1值替换至符合条件的R2列
解决方案
你可以用以下两种方法实现需求:针对数据中R2列值为"-"或"NA"(字符串型)的行,将对应R1列的值替换到R2列。
方法1:Base R 实现
df <- data.frame( R1 = c("EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","EFTA : 0 / BAA/GBR : 0 / ES : 2","NA"), R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","NA","CEFTA : 0 / MSA/GB : 0 / TR : 0") ) # 执行替换逻辑 df$R2 <- ifelse(df$R2 %in% c("-", "NA"), df$R1, df$R2) # 查看最终结果 df
执行后输出结果:
R1 R2 1 EFTA : 0 / BAA/GBR : 0 / ES : 2 EFTA : 0 / BAA/GBR : 0 / ES : 2 2 10 EFTA : 0 / BAA/GBR : 0 / ES : 2 3 EFTA : 0 / BAA/GBR : 0 / ES : 2 EFTA : 0 / BAA/GBR : 0 / ES : 2 4 NA CEFTA : 0 / MSA/GB : 0 / TR : 0
方法2:dplyr 包实现
如果你习惯用tidyverse风格的代码,可使用dplyr的case_when函数:
library(dplyr) df <- data.frame( R1 = c("EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","EFTA : 0 / BAA/GBR : 0 / ES : 2","NA"), R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","NA","CEFTA : 0 / MSA/GB : 0 / TR : 0") ) # 执行替换逻辑 df <- df %>% mutate(R2 = case_when( R2 %in% c("-", "NA") ~ R1, TRUE ~ R2 )) # 查看最终结果 df
代码说明
- 两种方法核心逻辑一致:判断
R2的值是否属于c("-", "NA"),满足条件则用R1的值覆盖R2,否则保留R2原有值。 - 注意数据中的
"NA"是字符串类型,不是R原生的缺失值NA,因此判断时直接匹配字符串即可。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

