根据第一行的值分析多行?

analyse multiple row dependig of the value of the first?

我有这个 table :

   record_id result date_start   date_end
1          1    pos                      
2          1        26/06/2019 28/06/2019
3          1        27/06/2019 29/06/2019
4          1        28/06/2019 30/06/2019
5          1        29/06/2019 01/07/2019
6          2    neg                      
7          2        01/07/2019 03/07/2019
8          2        02/07/2019 04/07/2019
9          2        03/07/2019 05/07/2019
10         2        04/07/2019 06/07/2019
11         2        05/07/2019 07/07/2019
12         3    pos                      
13         3        07/07/2019 09/07/2019
14         3        08/07/2019 10/07/2019

我想计算每一行的日期差异,没问题。之后我想要的是分别分析“pos”和“neg”组。但是当我有日期时,我的数据中没有结果值。这是从 REDCap 导入的数据,带有重复仪器。 我使用 tidyverse,我认为 dplyr 可以提供帮助,这不是我必须做的 pivot_wider 吗?我试过了,没办法...

谢谢,如果有人可以帮助...

像这样,例如,计算每组的平均日期差异?

library(tidyverse)
library(lubridate)
df %>% 
  fill(result, .direction = "down") %>% 
  filter(!is.na(date_start)) %>% 
  mutate(date_start = dmy(date_start),
         date_end = dmy(date_end)) %>% 
  group_by(result) %>% 
  summarise(mean_date_dif = mean(date_end - date_start))

#`summarise()` ungrouping output (override with `.groups` argument)
## A tibble: 2 x 2
#  result mean_date_dif
#  <chr>  <drtn>       
#1 neg    2 days       
#2 pos    2 days 

数据

df <- tibble::tribble(
        ~record_id, ~result,  ~date_start,    ~date_end,
                1L,   "pos",           NA,           NA,
                1L,      NA, "26/06/2019", "28/06/2019",
                1L,      NA, "27/06/2019", "29/06/2019",
                1L,      NA, "28/06/2019", "30/06/2019",
                1L,      NA, "29/06/2019", "01/07/2019",
                2L,   "neg",           NA,           NA,
                2L,      NA, "01/07/2019", "03/07/2019",
                2L,      NA, "02/07/2019", "04/07/2019",
                2L,      NA, "03/07/2019", "05/07/2019",
                2L,      NA, "04/07/2019", "06/07/2019",
                2L,      NA, "05/07/2019", "07/07/2019",
                3L,   "pos",           NA,           NA,
                3L,      NA, "07/07/2019", "09/07/2019",
                3L,      NA, "08/07/2019", "10/07/2019"
        )