我正在尝试解决一个简单的问题。我检查一个特定的条件,如果它是真的,我插入一个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因为它会更改日期格式
你也可以强制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)