如何合并列中具有相同值的数据框的行
How to merge rows of a dataframe that have the same value in a column
我有一个数据帧,是在使用 tidyr::spread()
将长格式数据帧转换为宽格式数据帧后获得的
数据框
orig_dataframe = data.frame(ID = c(1,1,2,2,3,3,4,4), Name = c("","a", "", "b", "", "c", "", "d"), Val1=(NA, 10,NA, 20, NA, 30,NA,40), Val2 = (100,NA, 200,NA, 300, NA, 400,NA))
看起来像下面
ID Name Val1 Val2
1 1 NA 10
2 1 a 100 NA
3 2 NA 20
4 2 b 200 NA
5 3 NA 30
6 3 c 300 NA
7 4 NA 40
8 4 d 400 NA
我想合并具有重复 ID 的行,因此数据框如下所示:
ID Name Val1 Val2
1 1 a 100 10
2 2 b 200 20
3 3 c 300 30
4 4 d 400 40
我该怎么做?
我们可以将空白(""
转换为NA
(na_if
),然后按'ID'分组,去掉列中的NA元素(假设[的个数=19=] 每列的每组元素相同)
library(dplyr)
orig_dataframe %>%
na_if("") %>%
group_by(ID) %>%
summarise(across(everything(), ~.x[complete.cases(.x)]))
-输出
# A tibble: 4 × 4
ID Name Val1 Val2
<dbl> <chr> <dbl> <dbl>
1 1 a 10 100
2 2 b 20 200
3 3 c 30 300
4 4 d 40 400
我有一个数据帧,是在使用 tidyr::spread()
数据框
orig_dataframe = data.frame(ID = c(1,1,2,2,3,3,4,4), Name = c("","a", "", "b", "", "c", "", "d"), Val1=(NA, 10,NA, 20, NA, 30,NA,40), Val2 = (100,NA, 200,NA, 300, NA, 400,NA))
看起来像下面
ID Name Val1 Val2
1 1 NA 10
2 1 a 100 NA
3 2 NA 20
4 2 b 200 NA
5 3 NA 30
6 3 c 300 NA
7 4 NA 40
8 4 d 400 NA
我想合并具有重复 ID 的行,因此数据框如下所示:
ID Name Val1 Val2
1 1 a 100 10
2 2 b 200 20
3 3 c 300 30
4 4 d 400 40
我该怎么做?
我们可以将空白(""
转换为NA
(na_if
),然后按'ID'分组,去掉列中的NA元素(假设[的个数=19=] 每列的每组元素相同)
library(dplyr)
orig_dataframe %>%
na_if("") %>%
group_by(ID) %>%
summarise(across(everything(), ~.x[complete.cases(.x)]))
-输出
# A tibble: 4 × 4
ID Name Val1 Val2
<dbl> <chr> <dbl> <dbl>
1 1 a 10 100
2 2 b 20 200
3 3 c 30 300
4 4 d 40 400