NA和其他条件的总和R

问题描述 投票:0回答:2

我已经看到很多类似的问题,但是无法弄清楚这个简单的问题。我不想折叠数据集。说我有这个数据集:

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

r if-statement dplyr cumsum
2个回答
0
投票

[一种选择是获取列'开始','结束',按'组'分组的rowSums元素的NA,从'epi'获取rleid


0
投票

使用dplyr的解决方案。假设您的数据框架结构合理,则每个起点始终都有一个关联的终点记录。

© www.soinside.com 2019 - 2024. All rights reserved.