如何在R语言中按条件将日期列的NA值替换为固定日期(dplyr/data.table)
按条件替换日期列中的NA值
使用data.table实现(最简写法)
利用data.table的行筛选+列赋值语法,直接定位目标行并修改:
# 原数据 df1 <- data.table(a = c(1, 2, 3, 4), dt = as.Date(c("2012-06-01", "2012-07-01", NA, NA))) # 按条件替换NA df1[a == 4 & is.na(dt), dt := as.Date("2012-07-01")]
执行后结果:
a dt 1: 1 2012-06-01 2: 2 2012-07-01 3: 3 <NA> 4: 4 2012-07-01
这个写法直接筛选出a==4且dt为NA的行,对dt列原地赋值,是data.table风格的高效最简写法。
使用dplyr实现(最简写法)
用if_else结合管道语法,精准匹配条件并替换:
library(dplyr) # 原数据 df1 <- data.table(a = c(1, 2, 3, 4), dt = as.Date(c("2012-06-01", "2012-07-01", NA, NA))) # 按条件替换NA df1 <- df1 %>% mutate(dt = if_else(a == 4 & is.na(dt), as.Date("2012-07-01"), dt))
执行后得到的结果和上面一致。如果需要保留原数据,也可以用mutate生成新列,不过直接修改原列更贴合需求。
内容的提问来源于stack exchange,提问作者PaulaSpinola
相关产品推荐
相关产品推荐

