如何根据条件计算时差(以天为单位)

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

我想计算纵向调查数据的“自基线以来的天数”,该数据以长数据格式组织,但我无法按参与者的 ID 进行分组。我的数据看起来像这样:

Participant     Date
1               2023-04-19
1               2023-05-01 
1               2023-05-16
2               2023-11-04 
2               2023-11-14
3               2024-01-02
3               2024-01-15
3               2024-02-01

我想计算每个参与者的“自基线以来的天数”。像这样的东西:

Participant     Date         Days since BL
1               2023-04-19      0
1               2023-05-01      12 
1               2023-05-16      27
2               2023-11-04      0
2               2023-11-14      10
3               2024-01-02      0
3               2024-01-15      14
3               2024-02-01      31

我尝试使用的代码看起来像这样

df <- df %>%
group_by(Participant) %>%
mutate(Date = as.Date(Date, format='%y/%m/%d')) %>%
mutate(DIFF=Date - lag(Date))

但是,计算值不正确,并且似乎没有以参与者特定的方式进行分组。我希望能够将每个参与者的第一个日期设置为他们的基准(即 0),然后,对于以下日期,从基准开始的天数是根据每个参与者自己的基准日期计算的。

r date rstudio lubridate longitudinal
1个回答
0
投票
library(tidyverse)

d = data.frame(Participant = rep(c("A","B"), each=50),
               Date = seq(as.Date("2023-01-01"), as.Date("2023-01-01") + 99, by="2 days"))

d %>% 
  arrange(Participant, Date) %>% 
  group_by(Participant) %>% 
  mutate(DIFF = Date - min(Date))
#> # A tibble: 100 × 3
#> # Groups:   Participant [2]
#>    Participant Date       DIFF   
#>    <chr>       <date>     <drtn> 
#>  1 A           2023-01-01  0 days
#>  2 A           2023-01-03  2 days
#>  3 A           2023-01-05  4 days
#>  4 A           2023-01-07  6 days
#>  5 A           2023-01-09  8 days
#>  6 A           2023-01-11 10 days
#>  7 A           2023-01-13 12 days
#>  8 A           2023-01-15 14 days
#>  9 A           2023-01-17 16 days
#> 10 A           2023-01-19 18 days
#> # ℹ 90 more rows

创建于 2024-04-11,使用 reprex v2.1.0

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