使用dplyr用NA替换将来的日期

时间:2019-08-19 19:28:22

标签: r replace dplyr lubridate tibble

我有一个while ((i=spawn.read()) != -1) { if (Character.isWhitespace((char)i)) { continue; } if (h == 30) { h = 0; k++; } spawnWorld[k][h] = (char)i; h++; } ,其中有几列包含日期,其中一些是将来的日期(例如,2019-08-26)。我需要将未来的日期替换为tibble,并希望使用NA替换。

到目前为止,我有以下内容无法正常工作:

dplyr

1 个答案:

答案 0 :(得分:3)

来自help(replace)

  

参数

     

x:向量

因此,请改用pull

library(dplyr)
d %>%
  pull("Date1") %>%
  replace(. > today(), NA)
#[1] "2019-08-05" NA           NA           NA           "2019-07-29"
#[6] "2019-08-12" "2019-08-19" NA           NA      

如果您需要tibble并尝试替换这些值,请使用mutate

d %>%
 mutate(Date2 = replace(Date1, Date1 > Sys.Date(), NA))
# A tibble: 9 x 3
#     ID Date1      Date2     
#  <int> <date>     <date>    
#1     1 2019-08-05 2019-08-05
#2     2 2019-08-26 NA        
#3     3 2019-08-26 NA        
#4     4 2019-08-26 NA        
#5     5 2019-07-29 2019-07-29
#6     6 2019-08-12 2019-08-12
#7     7 2019-08-19 2019-08-19
#8     8 2019-08-26 NA        
#9     9 2019-08-26 NA           

如@ d.b所指出。在注释中,以及在How to prevent ifelse() from turning Date objects into numeric objects if_elseifelse中,日期也不是很好。

# don't run
# d %>% mutate(Date2 = ifelse(Date1 < today(), Date1, NA))

更新

如果您有多列,则选项为mutate_if

d %>%
  mutate_if(., is.Date, .funs = ~replace(., . > today(), NA))