【问题标题】:R dplyr mutate does not work with as.Date(NA) 'origin' must be suppliedR dplyr mutate 不适用于 as.Date(NA) 'origin' 必须提供
【发布时间】: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 %&gt;% mutate(dateNum = as.Date(dateNum, origin="2000-12-31"))
  • 是的,你是对的。那是我的错误。

标签: r date if-statement dplyr na


【解决方案1】:

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

'as.Date' 将接受数字数据(自 epoch),但如果提供了 'origin'。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多