如何根据 r 中的 2 列数据框合并和汇总行

how to merge and summerise rows based on 2 columns of dataframe in r

我有以下数据框作为 df1:

    Date        id  Age  B   R       S
1   00/01/16    223 55  7.9  5.65   138
2   00/01/16    223 55  NA   NA      NA
3   00/01/16    223 55  NA   NA      NA
4   00/01/17    223 55  NA   NA      NA
5   00/01/17    223 55  9.6  5.71   135
6   00/01/17    223 55  NA   NA      NA
7   00/01/18    223 55  NA   NA      NA
8   00/01/18    223 55  NA   NA      NA
9   00/01/18    223 55 11.5  6.11   135
10  00/01/17    223 55  NA   NA      NA
11  00/01/05    102 60  NA   NA     135
12  00/01/05    102 60  19.7 5.5     NA
13  00/01/05    102 60  NA   NA      NA
14  00/01/05    102 60  NA   NA      NA
15  00/01/06    102 60  18.5 5.34   144
16  00/01/06    102 60  NA   NA      NA
17  00/01/06    102 60  NA   NA      NA

首先,我需要根据“id”合并行,然后根据“日期”合并行。我的问题是没有省略 raws with NA.for example,在 raws No. 11 和 12 中,我有对于“S”列,select 介于 135 和 143 之间。最后,我的输出应该如下数据框 (df2):

      Date       id  Age     B     R     S
1   00/01/16    223  55     7.9   5.65  138
2   00/01/17    223  55     9.6   5.71  135
3   00/01/18    223  55     11.5  6.11  135
4   00/01/05    102  60     19.7  5.5   135
5   00/01/06    102  60     18.5  5.34  144

我写了下面的代码:

df2 <- df1 %>% 
  group_by(Date,id) %>% 
  summarise_all(funs(na.omit))

但我收到以下错误:

Error: Problem with `summarise()` column `S`.
i `S = na.omit(S)`.
x `S` must be size 6 or 1, not 0.
i An earlier column had size 6.
i The error occurred in group 1: Request_Date = "00/01/05", Patient.Code = 223

如果有人与我分享 his/her 评论,我将不胜感激。

此致问候

您似乎只删除了带有 NA 的行:

df1 |> complete.cases()

将数据转换为长格式,然后再转回宽格式应该做类似的事情,我认为。试试这个:

library(tidyr)

df2 = df %>% 
  pivot_longer(cols = c(B, R, S)) %>% 
  filter(is.na(value) == FALSE) %>% 
  pivot_wider(names_from = name, values_from = value)