dplyr::if_else - 检查条件并插入 NA 作为评估的一部分

cep*_*pod 4 r dplyr

我正在尝试解决一个简单的问题。我检查一个特定的条件,如果它是真的,我插入一个date值或插入NA(即留下一个空白单元格)。

为了if_else让它发挥作用,我正在使用,但它顽固地拒绝工作(我花了几个小时阅读 SO 和帮助页面)。

这是我尝试过但失败的方法:

library(tidyverse)
library(lubridate)

df <- data.frame(date   = dmy(c("01/01/2019", "02/01/2019", "03/01/2019")),
           status = c("Active", "Suspended", "Active"),
           stringsAsFactors = FALSE)

  df %>%  mutate(sus_date = if_else(status == "suspended", 1, 2))   # This works

  df %>% mutate(sus_date = if_else(status == "suspended", date, NA)) # Throws an Error
  Error: `false` must be a `Date` object, not a logical vector
  Call `rlang::last_error()` to see a backtrace.


  df %>% mutate(sus_date = if_else(status == "suspended", date, NA_real_)) # Throws an error
  Error in as.Date.numeric(value) : 'origin' must be supplied
Run Code Online (Sandbox Code Playgroud)

这似乎是一个微不足道的问题,不应该花这么长时间才能找到答案!

任何想法如何做到这一点?

附:我想避免使用,base::ifelse因为它会更改日期格式

Ony*_*mbu 9

你也可以强制NA进入日期,即:

df %>% mutate(sus_date = if_else(status == "Suspended", date, ymd(NA))) 
        date    status   sus_date
1 2019-01-01    Active       <NA>
2 2019-01-02 Suspended 2019-01-02
3 2019-01-03    Active       <NA>
Run Code Online (Sandbox Code Playgroud)