首页 > 解决方案 > 在R中将行合并为一个

问题描述

我有一个如下所示的数据框:

ID  Name                m1  m2  m3  m4  m5  m6  m7  m8
37  Grötlingbo Roes II  0   0   0   0   1   0   0   0   
37  Grötlingbo Roes II  0   1   0   0   0   0   0   0   
37  Grötlingbo Roes II  0   0   1   0   0   0   0   0   
123 Hablingbo Havor III 0   0   0   0   0   0   0   0   
123 Hablingbo Havor III 0   0   0   0   0   0   1   0   
38  Hablingbo Havor I   0   0   1   0   0   0   0   0   
38  Hablingbo Havor I   0   0   0   0   0   0   0   0   
38  Hablingbo Havor I   0   0   0   0   0   0   0   0   
38  Hablingbo Havor I   0   0   0   1   0   0   0   0   
38  Hablingbo Havor I   0   1   0   0   0   1   0   0

我需要将具有相同名称的行及其在 m1 到 m8 列中的观察结果合并为一行。只有行名称相同,但观察结果不同。我知道观察结果不会发生冲突,因为我之前已经在整理数据框了。由于我不想添加新列,因此不能使用pivot_wider。而且我相信unite函数仅用于合并列,而不是行。我觉得可以用group_by完成,但不知道我需要添加什么。我已经在这里阅读了很多条目,但还没有找到我的问题的答案。有没有人有办法解决吗?

标签: rrows

解决方案


尝试以下summarize(across())方法:

library(dplyr)
df %>%
  group_by(ID, Name) %>%
  summarize(across(starts_with("M"), sum))

`summarise()` regrouping output by 'ID' (override with `.groups` argument)
# A tibble: 3 x 10
# Groups:   ID [3]
     ID Name                       m1    m2    m3    m4    m5    m6    m7    m8
  <dbl> <chr>                   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1    37 "Grötlingbo Roes II"        0     1     1     0     1     0     0     0
2    38 "Hablingbo Havor I"         0     1     1     1     0     1     0     0
3   123 "Hablingbo Havor III"       0     0     0     0     0     0     1     0

推荐阅读