基于条件替换数据框中的NA值(仅替换var1=0行的NA)
解决方案
基础R实现
先定位var1 == 0的行,仅对这些行中的NA值进行替换:
# 构造示例数据 mydf <- data.frame( id = c(1, 2, 3, 4), var1 = c(3, 0, 1, 0), var2 = c(5, NA, 3, NA), var3 = c(NA, 7, NA, NA), var4 = c(10, NA, 6, 6) ) # 筛选var1为0的行,替换其中的NA为0 cond_rows <- mydf$var1 == 0 mydf[cond_rows, ][is.na(mydf[cond_rows, ])] <- 0
执行后得到的结果:
id var1 var2 var3 var4 1 1 3 5 NA 10 2 2 0 0 7 0 3 3 1 3 NA 6 4 4 0 0 0 6
tidyverse(dplyr)实现
如果你习惯用tidyverse生态,可以用dplyr的mutate+across组合实现:
library(dplyr) mydf <- mydf %>% mutate( across( .cols = -id, # 排除id列,如需处理可去掉此参数 .fns = ~ifelse(var1 == 0 & is.na(.), 0, .) ) )
这个方法通过across遍历指定列,用ifelse判断:仅当当前行var1为0且值为NA时,替换为0,其余情况保留原数值。
内容的提问来源于stack exchange,提问作者Dimitris Karditsas
相关产品推荐
相关产品推荐

