【发布时间】:2020-01-31 00:45:16
【问题描述】:
我见过很多这样的问题,但无法弄清楚这个简单的问题。我不想折叠数据集。假设我有这个数据集:
library(tidyverse)
library(lubridate)
df <- data.frame(group = c("a", "a", "a", "a", "a", "b", "b", "b"),
starts = c("2011-09-18", NA, "2014-08-08", "2016-09-18", NA, "2013-08-08", "2015-08-08", NA),
ends = c(NA, "2013-03-06", "2015-08-08", NA, "2017-03-06", "2014-08-08", NA, "2016-08-08"))
df$starts <- parse_date_time(df$starts, "ymd")
df$ends <- parse_date_time(df$ends, "ymd")
df
group starts ends
1 a 2011-09-18 <NA>
2 a <NA> 2013-03-06
3 a 2014-08-08 2015-08-08
4 a 2016-09-18 <NA>
5 a <NA> 2017-03-06
6 b 2013-08-08 2014-08-08
7 b 2015-08-08 <NA>
8 b <NA> 2016-08-08
期望的输出是:
group starts ends epi
1 a 2011-09-18 <NA> 1
2 a <NA> 2013-03-06 1
3 a 2014-08-08 2015-08-08 2
4 a 2016-09-18 <NA> 3
5 a <NA> 2017-03-06 3
6 b 2013-08-08 2014-08-08 1
7 b 2015-08-08 <NA> 2
8 b <NA> 2016-08-08 2
我在想这样的事情,但显然没有考虑没有NA的剧集
df <- df %>%
group_by(group) %>%
mutate(epi = cumsum(is.na(ends)))
df
我不确定如何将cumsum(is.na) 与条件if_else 合并。也许我走错路了?
任何建议都会很棒。
【问题讨论】:
标签: r if-statement dplyr cumsum