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()将这些值视为自原点以来的天数,但您尚未提供基于的计算原点.