根据最早和最晚日期以及R中另一列中的公共字符串创建公共变量?

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

我是 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”列中的最新日期,无论它们是否观察结果不在同一行。

r matching
1个回答
0
投票

听起来您想使用

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
© www.soinside.com 2019 - 2024. All rights reserved.