折叠多列中匹配的行

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

我有一个数据框,其中第一列中有患者 ID,第二列中有进行特定测试的日期。此后的列是特定测试的列(b、a、c、d)。目前,对于每个 ID 和每个日期,我都有一行包含特定测试的结果和所有其他测试列中的 NA。我想以一种方式折叠数据框,只要 ID 和日期匹配,测试结果就仅折叠成一行。

我尝试过aggregate()、collapse()或group_by()函数,但没能做到这一点。

有人可以帮忙吗?谢谢!

This is the table how it currently looks. For whenever ID and date match, I would like all the results in one row only

我尝试了aggregate()、collapse()和group_by()。但总是很难实现该功能仅在 ID 和日期匹配时才激活,而不仅仅是其中一列。

r aggregate rstudio r-collapse
1个回答
0
投票

从图片复制的数据:

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