我有一个数据框,其中第一列中有患者 ID,第二列中有进行特定测试的日期。此后的列是特定测试的列(b、a、c、d)。目前,对于每个 ID 和每个日期,我都有一行包含特定测试的结果和所有其他测试列中的 NA。我想以一种方式折叠数据框,只要 ID 和日期匹配,测试结果就仅折叠成一行。
我尝试过aggregate()、collapse()或group_by()函数,但没能做到这一点。
有人可以帮忙吗?谢谢!
我尝试了aggregate()、collapse()和group_by()。但总是很难实现该功能仅在 ID 和日期匹配时才激活,而不仅仅是其中一列。
从图片复制的数据:
X = read.table(text = "PatientID Date b a c d
1 2024-03-0420:16:11 0.4 NA NA NA
1 2024-03-0422:40:11 NA TRUE NA NA
1 2024-03-0522:40:11 NA NA FALSE NA
1 2024-03-0622:40:11 NA NA NA Strong
2 2024-03-0422:40:11 NA NA NA Weak
2 2024-03-0522:40:11 NA NA FALSE NA
3 2024-03-0622:40:11 0.6 NA NA NA
3 2024-03-0622:40:11 NA FALSE NA NA", header = TRUE)
提取数据(请指定
tz
(时区))和aggregate
:
X$Date = as.Date(as.POSIXct(X$Date, format = "%Y-%m-%d%H:%M:%S"), tz = "")
aggregate(. ~ PatientID + Date, data = X, FUN = na.omit, na.action = "na.pass")
给予
PatientID Date b a c d
1 1 2024-03-04 0.4 TRUE
2 2 2024-03-04 Weak
3 1 2024-03-05 FALSE
4 2 2024-03-05 FALSE
5 1 2024-03-06 Strong
6 3 2024-03-06 0.6 FALSE