R dplyr mutate不适用于as.Date(NA)'origin'必须提供

K.I*_*.I. 3 if-statement r date na dplyr

所以我有这种非常奇怪的情况.使用as.Date()函数进行R和日期转换.最奇怪的是,ifelse语句不起作用,因为它应该工作.

所以情况:

我想从数字中提取日期,但是坚持NA发生的情况.如果我申请as.Date(NA),我不会收到任何错误.但奇怪的事情始于dataFrames.

这是一个例子:

###### create temp data.frame
t1 <- data.frame(dateNum = c(6000,6001,NA))

##### First attempt: straight ############
t2 <- t1 %>% dplyr::mutate(
    dateConverted = as.Date(dateNum)
)

##### Second attempt: ifelse statement ############
t2 <- t1 %>% mutate(
    dateConverted = ifelse(is.na(dateNum),NA,as.Date(dateNum))
)

##### Third attempt: ifelse statement for number 6000 ############
t2 <- t1 %>% mutate(
    naValue = is.na(dateNum),
    dateFixed = ifelse(naValue,6000,dateNum),
    dateConverted = ifelse(naValue,NA,as.Date(dateFixed))
)
Run Code Online (Sandbox Code Playgroud)

这是输出.必须提供错误'origin'

> ###### create temp data.frame
> t1 <- data.frame(dateNum = c(6000,6001,NA))
> 
> ##### First attempt: straight ############
> t2 <- t1 %>% dplyr::mutate(
+     dateConverted = as.Date(dateNum)
+ ) Error in as.Date.numeric(c(6000, 6001, NA)) : 'origin' must be supplied
> 
> ##### Second attempt: ifelse statement ############
> t2 <- t1 %>% mutate(
+     dateConverted = ifelse(is.na(dateNum),NA,as.Date(dateNum))
+ ) Error in as.Date.numeric(c(6000, 6001, NA)) : 'origin' must be supplied
> 
> ##### Third attempt: ifelse statement for number 6000 ############
> t2 <- t1 %>% mutate(
+     naValue = is.na(dateNum),
+     dateFixed = ifelse(naValue,6000,dateNum),
+     dateConverted = ifelse(naValue,NA,as.Date(dateFixed))
+ ) Error in as.Date.numeric(c(6000, 6001, 6000)) : 'origin' must be supplied
>
Run Code Online (Sandbox Code Playgroud)

Kar*_*Woo 21

问题不NA在于dplyr,而在于你的数字数据.来自?as.Date:

'as.Date'将接受数字数据(自纪元以来的天数),但仅限于提供'origin'.

您传递的是函数数值(6000和6001),但没有关于这些值的信息.as.Date()将这些值视为自原点以来的天数,但您尚未提供基于的计算原点.