如何合并列中具有相同值的数据框的行

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