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

R dplyr mutate does not work with as.Date(NA) 'origin' must be supplied

所以我遇到了这种非常奇怪的情况。用 R 和日期转换用 as.Date() 函数。最奇怪的是 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))
)

这是输出。必须提供错误 '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
>

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

'as.Date' will accept numeric data (the number of days since an epoch), but only if 'origin' is supplied.

您正在传递函数数值(6000 和 6001),但没有关于这些值代表什么的信息。 as.Date() 会将这些值视为自来源以来的天数,但您尚未提供来源以供其计算。