用ifelse()改变一个新变量会丢失日期格式

时间:2018-03-24 04:59:41

标签: r

这是一个小df:

x <- structure(list(DOB = structure(c(-1689, 2884, 11348, 10449, -1280, 
3128), class = "Date"), SU_BIRTH_DATE = structure(c(47482, 2884, 
11347, 10449, -1280, 2324), class = "Date")), .Names = c("DOB", 
"SU_BIRTH_DATE"), row.names = c(NA, 6L), class = "data.frame")

看起来像:

glimpse(x)
Observations: 6
Variables: 2
$ DOB           <date> 1965-05-18, 1977-11-24, 2001-01-26, 1998-08-11, 1966-07-01, 1978-07-26
$ SU_BIRTH_DATE <date> 2100-01-01, 1977-11-24, 2001-01-25, 1998-08-11, 1966-07-01, 1976-05-13

我想使用ifelse()创建一个新功能,如下所示:

test <- x %>% 
  mutate(NewDOB = ifelse(is.na(DOB), SU_BIRTH_DATE, DOB))

然而:

glimpse(test)
Observations: 6
Variables: 3
$ DOB           <date> 1965-05-18, 1977-11-24, 2001-01-26, 1998-08-11, 1966-07-01, 1978-07-26
$ SU_BIRTH_DATE <date> 2100-01-01, 1977-11-24, 2001-01-25, 1998-08-11, 1966-07-01, 1976-05-13
$ NewDOB        <dbl> -1689, 2884, 11348, 10449, -1280, 3128

新变量不是它的双倍日期。我尝试使用lubridate ymd()重新格式化它:

test <- x %>% 
  mutate(NewDOB = ifelse(is.na(DOB), SU_BIRTH_DATE, DOB)) %>% 
  mutate(NewDOB = ymd(NewDOB))

可是:

glimpse(test)
Observations: 6
Variables: 3
$ DOB           <date> 1965-05-18, 1977-11-24, 2001-01-26, 1998-08-11, 1966-07-01, 1978-07-26
$ SU_BIRTH_DATE <date> 2100-01-01, 1977-11-24, 2001-01-25, 1998-08-11, 1966-07-01, 1976-05-13
$ NewDOB        <date> NA, NA, NA, NA, NA, NA

我还尝试了as.Date()而不是ymd,这给出了错误:

  

mutate_impl(.data,dots)中的错误:     评价错误:&#39;来源&#39;必须提供。

如何根据原始的两个日期功能创建新的日期功能而不会丢失日期格式?或者至少能够将其转化回来?在这种情况下,由于所有DOB的情况都不是NA,我希望新功能NewDob与DOB具有完全相同的数据。

1 个答案:

答案 0 :(得分:1)

as.Date(test$NewDOB, origin="1970-1-1")