dplyr::if_else()
在约会的时候,我想退票
NA
-但是没有
NA_date_
或
NA_double_
在R(我知道的-或列出的)
here
)? 如何执行以下代码:
ep <- df %>%
group_by(id, episode) %>%
summarise(ep_adm = min(adm, na.rm = T),
ep_sepa = if_else(all(is.na(sepa)),
if_else(all(is.na(adm)), NA, max(adm, na.rm = T)),
max(sepa, na.rm = T)))
没有错误?
false
必须是逻辑类型,而不是双精度类型。
sepa
日期),由
group_by()
ep_adm
,和
ep_sepa
那么最后一个入院日期将被使用,其他明智的使用最后一个分离日期。
dplyr::if\u else()
,就像这样
返回a
<date>
对象)。
预期产量:
ep <- df %>%
group_by(id, episode) %>%
summarise(ep_adm = min(adm, na.rm = T),
ep_sepa = ifelse(all(is.na(sepa)),
ifelse(all(is.na(adm)), NA, max(adm, na.rm = T)),
max(sepa, na.rm = T)))
ep$ep_adm <- as.Date(ep$ep_adm, origin = "1970-01-01")
ep$ep_sepa <- as.Date(ep$ep_sepa, origin = "1970-01-01")
# # A tibble: 4 x 4
# # Groups: id [?]
# id episode ep_adm ep_sepa
# <dbl> <int> <date> <date>
# 1 1 1 2002-06-28 2002-07-05
# 2 1 2 2002-08-25 2002-08-25
# 3 1 3 2003-06-26 2003-06-26
# 4 1 4 2007-04-10 2007-04-11
left_join(df, ep, by = c("id", "episode"))
# # A tibble: 8 x 6
# id episode adm sepa ep_adm ep_sepa
# <dbl> <int> <date> <date> <date> <date>
# 1 1 1 2002-06-28 NA 2002-06-28 2002-07-05
# 2 1 1 2002-06-28 NA 2002-06-28 2002-07-05
# 3 1 1 2002-06-28 2002-07-05 2002-06-28 2002-07-05
# 4 1 1 2002-06-28 2002-07-05 2002-06-28 2002-07-05
# 5 1 2 2002-08-25 NA 2002-08-25 2002-08-25
# 6 1 3 2003-06-26 NA 2003-06-26 2003-06-26
# 7 1 4 2007-04-10 NA 2007-04-10 2007-04-11
# 8 1 4 2007-04-10 2007-04-11 2007-04-10 2007-04-11
数据
df <- structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 1), episode = c(1L,
1L, 1L, 1L, 2L, 3L, 4L, 4L), adm = structure(c(11866, 11866,
11866, 11866, 11924, 12229, 13613, 13613), class = "Date"), sepa = structure(c(NA,
NA, 11873, 11873, NA, NA, NA, 13614), class = "Date")), row.names = c(NA,
-8L), class = c("tbl_df", "tbl", "data.frame"))