我已经看到很多类似的问题,但是无法弄清楚这个简单的问题。我不想折叠数据集。说我有这个数据集:
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
合并。也许我走错路了?
任何建议都会很棒。
我已经看到很多类似的问题,但是无法弄清楚这个简单的问题。我不想折叠数据集。说我有这个数据集:library(tidyverse)library(lubridate)df
[一种选择是获取列'开始','结束',按'组'分组的rowSums
元素的NA
,从'epi'获取rleid
使用dplyr
的解决方案。假设您的数据框架结构合理,则每个起点始终都有一个关联的终点记录。