【发布时间】:2016-06-10 06:09:36
【问题描述】:
所以我遇到了这种非常奇怪的情况。使用 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))
)
这里是输出。出现错误必须提供'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
>
【问题讨论】:
-
正如@Kara Woo 所说,提供一个来源,您的代码将起作用,例如:
t1 %>% mutate(dateNum = as.Date(dateNum, origin="2000-12-31")) -
是的,你是对的。那是我的错误。
标签: r date if-statement dplyr na