识别开始日期,结束日期,连续编号的运行时间,并转置到新的数据框中

lg9*_*929 5 r date

我有一组看起来像这样的数据:

          Date boolean
407 2006-06-01       1
408 2006-06-02       1
409 2006-06-03       1
410 2006-06-04      NA
411 2006-06-05       0
412 2006-06-06       1
413 2006-06-07       1
414 2006-06-08       0
415 2006-06-09       1
Run Code Online (Sandbox Code Playgroud)

由此,我试图创建一个新的数据框,该数据框将使用列标题显示1运行的日期以及运行的时间,并带有列标题:1)开始日期,2)结束日期和3)运行时间。

最终,我想从上面的数据创建一个看起来像这样的数据框:

  Start Date   End Date  Length of Run
1 2006-06-01 2006-06-03              3
2 2006-06-06 2006-06-07              2  
Run Code Online (Sandbox Code Playgroud)

我的数据中也有一些NA,在整个数据中也需要忽略。

jos*_*ber 4

您可以使用 来执行此操作dplyr,使用mutate将缺失值转换boolean为 0,group_by计算具有变量 常量值的组booleanfilter限制boolean设置为 1 且该组有多个成员的组,然后summarize获取相关的摘要信息。(我最后采取了一些额外的步骤来删除分组变量)。

library(dplyr)
dat %>%
  mutate(boolean = ifelse(is.na(boolean), 0, boolean)) %>%
  group_by(group = cumsum(c(0, diff(boolean) != 0))) %>%
  filter(boolean == 1 & n() > 1) %>%
  summarize("Start Date"=min(as.character(Date)),
            "End Date"=max(as.character(Date)),
            "Length of Run"=n()) %>%
  ungroup() %>%
  select(-matches("group"))
#   Start Date   End Date Length of Run
#        (chr)      (chr)         (int)
# 1 2006-06-01 2006-06-03             3
# 2 2006-06-06 2006-06-07             2
Run Code Online (Sandbox Code Playgroud)

数据:

dat <- read.table(text="          Date boolean
407 2006-06-01       1
408 2006-06-02       1
409 2006-06-03       1
410 2006-06-04      NA
411 2006-06-05       0
412 2006-06-06       1
413 2006-06-07       1
414 2006-06-08       0
415 2006-06-09       1", header=T)
Run Code Online (Sandbox Code Playgroud)