我是 R 新手,目前我正在研究长格式的临床数据集,其中包括患者 ID、治疗及其开始和结束日期。 一些患者包括不止一种治疗,其中一些被错误编码,例如,一些患者正在接受“f”治疗,但因为每月接受一次治疗,而不是从 199x-200x 接受“f”治疗,所以他们收到的每一份申请都为单独治疗;导致一些患者接受正确编码的“f”,但有些患者有大约 50 种不同的“f”治疗(表示为不同的行),每个月都有唯一的开始和结束日期,我想从其中选择最早和最晚来计算实时时间治疗中。
数据如下:
set.seed(0)
patient_id <- sample(1:10, size = 100, replace = TRUE)
treatment <- sample(letters[1:6], size = 100, replace = TRUE)
start_date <- seq(as.POSIXct('1990/01/01'), as.POSIXct('2020/01/01'), by = "100 days")
start_date <- sample(start_date, size = 100, replace = TRUE)
start_date <- as.Date(start_date)
df <- data.frame(patient_id, treatment, start_date)
df <- df %>%
mutate(real_end_date = start_date + sample(1:1e4, size = 100, replace = TRUE))
df$end_date <- as.Date(ifelse(df$patient_id <= 5 & df$treatment == "f",
df$start_date %m+% months(1),
df$real_end_date))
您能帮我弄清楚如何将“f”治疗编码为唯一变量,而不是只在某些“f”患者中进行大量重复的长表。
编辑:简单来说,我想要完成的是告诉 R,如果 ID 和处理相同,则选择“start_date”列中的最早日期和“end_date”列中的最新日期,无论它们是否观察结果不在同一行。
听起来您想使用
summarise()
:
library(dplyr)
df |> summarise(start_date = min(start_date), end_date = max(real_end_date), .by = c(patient_id, treatment))
输出:
patient_id treatment start_date end_date
1 9 c 1998-03-20 2040-03-18
2 4 b 1991-05-16 2035-11-18
3 7 c 2003-06-02 2040-04-21
4 1 c 2001-10-10 2038-02-28
5 2 a 1997-12-10 2019-07-16
6 7 e 2015-03-11 2020-10-03
7 2 f 1990-04-11 1992-04-11
8 3 f 1990-10-28 2028-09-17
9 1 f 2009-06-10 2028-07-16
10 5 d 1999-08-02 2027-06-07
11 10 a 1990-04-11 2012-10-14
12 6 e 1997-09-01 2025-07-19
13 10 e 1996-07-28 2042-04-02
14 7 f 2005-01-22 2036-03-25
15 9 a 1997-05-24 2025-01-10
16 5 c 1997-02-13 2040-05-01
17 5 f 2018-10-01 2031-10-02
18 9 f 2009-09-18 2016-07-05
19 2 d 1993-11-01 2031-12-10
20 1 d 2006-09-14 2006-11-09
21 6 a 1997-05-24 2025-09-19
22 10 b 2001-03-24 2039-01-13
23 10 c 2007-07-11 2037-04-04
24 6 d 2003-06-02 2040-01-22
25 4 a 1999-11-10 2030-09-01
26 4 c 2009-03-02 2018-11-22
27 7 d 1990-10-28 2040-07-30
28 6 b 1998-10-06 2026-07-08
29 8 d 2017-12-05 2044-05-01
30 8 b 1995-03-16 2015-03-02
31 7 b 2006-02-26 2022-11-08
32 3 b 2018-03-15 2018-07-14
33 2 c 1993-01-05 2019-10-08
34 6 c 2015-03-11 2018-03-30
35 6 f 2011-08-19 2028-11-25
36 3 e 2009-12-27 2026-04-25
37 3 c 2016-07-23 2043-11-14
38 8 a 1993-11-01 2014-09-17
39 1 e 1996-04-19 2019-05-21
40 8 e 2001-07-02 2044-01-16
41 9 e 1993-07-24 2011-03-31
42 4 f 2012-03-06 2036-12-15
43 1 a 1990-07-20 2023-09-18
44 7 a 2009-03-02 2016-12-03
45 3 a 2019-01-09 2034-08-12
46 2 e 2009-09-18 2036-03-30
47 8 f 2014-12-01 2038-10-02
48 5 b 2011-01-31 2027-07-23