使用 dplyr 将 future 日期替换为 NA

标签 r replace dplyr lubridate tibble

我有一个 tibble,其中有几列包含日期,其中一些是将来的日期(例如 2019-08-26)。我需要用 NA 替换 future 的日期,并希望使用 dplyr 来实现这一点。

到目前为止,我有以下内容,但不起作用:

library(lubridate)
library(dplyr)
library(tibble)
d <- tibble("ID" = 1:9,
            "Date1" = as_date(c("2019-08-05", "2019-08-26", "2019-08-26",
                                "2019-08-26", "2019-07-29", "2019-08-12", 
                                "2019-08-19", "2019-08-26", "2019-08-26")),
            "Date2" = as_date(c("2019-08-12", "2019-09-02", "2019-09-02",
                                 "2019-09-02", "2019-08-05", "2019-08-19",
                                 "2019-08-26", "2019-09-02", "2019-09-02")))

d %>%
  select("Date1") %>%
  replace(. > today(), NA) #This line doesn't work

最佳答案

来自帮助(替换)

Arguments

x: vector

所以使用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 objectsif_elseifelse 以及日期不能很好地结合在一起。

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

更新

如果您有多个列,则选项是 mutate_if

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

关于使用 dplyr 将 future 日期替换为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57562847/

相关文章:

javascript - R networkD3包: node coloring in simpleNetwork()

r - x 没有适用于 'tbl_vars' 的方法应用于类 "c(' double', 'numeric' ) 的对象”

r - 覆盖 left_join dplyr 来更新数据

r - 来自 dplyr/tidyverse 的 Complete() 函数不适用于 Shiny 交互变量

重新定义 R 的 nnet::multinom predict.multinom 预测方法以支持类型 ="link"

r - 在ggplot2可视化文件中超链接文本

string - 使用变量查找并替换 ksh 中包含正斜杠的字符串

javascript - 正则表达式在行首匹配字符串分组

javascript - VS 2013 查找并替换 document.getElementById ("elementId").value 为 $("#elementId).val()

r - 使用 dplyr distinct 忽略 R 中 sf 对象的几何形状