如何根据 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)
我有以下数据框作为 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)