我正在考虑构造一个周期性事件生存分析,并且正在努力研究如何计算事件之间的时间间隔。我的数据格式很长,每一行都指示医院发作和发作的年龄(以月为单位)。 我的问题是,为了进行分析,我需要为每个参与者计算情节之间的时间。我意识到这可能仅涉及在参与者之间循环/迭代,但是我无法弄清楚如何获得每个参与者中事件n和n-1之间的时间。
我找到了上一个问题Date-time differences between rows in R 这部分地回答了我的问题,但是对于任何事件,对于每个参与者来说,对于每个参与者,事件数量都不相同的多个事件如何实现,都没有任何想法。
[ID] [age_of_hosp]
[1,] 3600001 872
[2,] 3600001 874
[3,] 3600001 868
[4,] 3600001 882
[5,] 3600001 873
[6,] 3600001 870
[7,] 3600001 869
[8,] 3600001 562
[9,] 3600001 871
[10,] 3600001 873
[11,] 3600001 885
[12,] 3600001 868
[13,] 3600001 852
[14,] 3600001 887
[15,] 3600001 885
[16,] 3600001 887
[17,] 3600001 853
[18,] 3600001 617
[19,] 3600001 885
[20,] 3600001 874
[21,] 3600001 617
[22,] 3600001 871
[23,] 3600001 851
[24,] 3600002 NA
[25,] 3600003 NA
[26,] 3600004 865
[27,] 3600005 655
[28,] 3600005 667
[29,] 3600005 656
[30,] 3600005 664
[31,] 3600006 814
[32,] 3600006 821
[33,] 3600006 821
[34,] 3600006 755
[35,] 3600006 813
任何建议或指点都会很棒!
答案 0 :(得分:1)
如果您愿意使用tibble
受欢迎的dplyr
组软件包中的tidyverse
和R
之类的软件包来解决方案,则可以尝试以下方法:
首先,使用tribble
函数重新创建数据:
library(tibble)
ages <- tribble(
~id, ~age_of_hosp,
3600001, 872,
3600001, 874,
3600001, 868,
3600001, 882,
3600001, 873,
3600001, 870,
3600001, 869,
3600001, 562,
3600001, 871,
3600001, 873,
3600001, 885,
3600001, 868,
3600001, 852,
3600001, 887,
3600001, 885,
3600001, 887,
3600001, 853,
3600001, 617,
3600001, 885,
3600001, 874,
3600001, 617,
3600001, 871,
3600001, 851,
3600002, NA,
3600003, NA,
3600004, 865,
3600005, 655,
3600005, 667,
3600005, 656,
3600005, 664,
3600006, 814,
3600006, 821,
3600006, 821,
3600006, 755,
3600006, 813
)
然后开始工作:
lag
。它找到先前的值。而且,如果您不熟悉管道运算符(%>%
),它将采用上一个函数的结果并将其“管道”到下一个函数中。NA
条记录。不知道您想怎么做。id
分组可以确保当我们使用滞后时,我们获得该事件的最后记录 ,而不仅仅是整个记录。mutate
修改字段或创建新字段。在这里,我用它来创建一个last_incident_age
字段,然后右转并使用它来获取以月为单位的时差。glimpse
只是查看结果数据集的一种好方法。 ;)library(dplyr)
ages %>%
filter(!is.na(age_of_hosp)) %>%
arrange(id, age_of_hosp) %>%
group_by(id) %>%
mutate(
last_incident_age = lag(age_of_hosp, 1, default = NA),
months_since_last = age_of_hosp - last_incident_age
) %>%
glimpse()