R语言如何编写双条件IF语句对指定NA值做0填充

实现注意事项
首先要纠正一个常见的R语法错误:判断值是否为缺失值NA不能用== NA,该表达式返回的结果永远是NA,无法正常完成逻辑判断,必须用is.na()函数做缺失值识别。
同时要先将数据框的date列转为日期格式,避免字符串比较出现逻辑错误。
具体实现代码
1. 基础R实现(逻辑索引赋值,效率最高)
# 转换日期列为标准日期格式 df$date <- as.Date(df$date) # 筛选同时满足两个条件的行,将对应People_vaccinated列赋值为0 df[is.na(df$People_vaccinated) & df$date < as.Date("0021-01-11"), "People_vaccinated"] <- 0
2. 基础R实现(用向量化IF语句ifelse实现)
如果你需要用IF类语句完成需求,可以用R自带的向量化判断函数ifelse:
df$date <- as.Date(df$date) df$People_vaccinated <- ifelse( # 同时满足两个条件 is.na(df$People_vaccinated) & df$date < as.Date("0021-01-11"), # 条件为真时赋值0 0, # 条件为假时保留原值 df$People_vaccinated )
3. dplyr包实现(语法更简洁)
如果使用tidyverse生态的dplyr包,代码可读性更高:
library(dplyr) df <- df %>% mutate( # 转换日期格式 date = as.Date(date), People_vaccinated = if_else( is.na(People_vaccinated) & date < as.Date("0021-01-11"), 0, People_vaccinated ) )
内容的提问来源于stack exchange,提问作者LouiseClarke1
相关产品推荐
相关产品推荐

