【发布时间】:2018-03-24 04:59:41
【问题描述】:
这是一个小的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) 中的错误: 评估错误:必须提供“原点”。
如何在不丢失日期格式的情况下,根据原来的两个日期特征创建新的日期日期?或者至少能够将其转换回来?在这种情况下,由于不是所有的 DOB 案例都是 NA,我希望新功能 NewDob 具有与 DOB 完全相同的数据。
【问题讨论】:
标签: r