首页 > 解决方案 > 基于分组R组合/连接同一数据框中的行

问题描述

我正在执行一个 map_df 函数,该函数会产生一个类似于下面的 df 的数据框。

name <- c('foo', 'foo', 'foo', 'bar', 'bar', 'bar')
year <- c(19, 19, 19, 18, 18, 18)
A <- c(1, NA, NA, 2, NA, NA)
B <- c(NA, 3, NA, NA, 4, NA)
C <- c(NA, NA, 2, NA, NA, 5)
df <- data.frame(name, year, A, B, C)

  name year  A  B  C
1  foo   19  1 NA NA
2  foo   19 NA  3 NA
3  foo   19 NA NA  2
4  bar   18  2 NA NA
5  bar   18 NA  4 NA
6  bar   18 NA NA  5

基于我在 df 中的唯一组,在这种情况下:名称 + 年份,我想将数据合并到同一行中。期望的结果:

  name year A B C
1  foo   19 1 3 2
2  bar   18 2 4 5

我绝对可以通过混合过滤和连接来完成此操作,但是使用我的实际数据框将是大量代码且效率低下。 我正在寻找一种更优雅的方式来“挤压”这个数据框。

标签: r

解决方案


library(dplyr)

df %>%
    group_by(name, year) %>%
    summarise_all(mean, na.rm = TRUE)

这是一个 dplyr 答案。如果您的数据真的看起来像您发布的数据,它会起作用。

输出:

  name   year     A     B     C
  <fct> <dbl> <dbl> <dbl> <dbl>
1 bar      18     2     4     5
2 foo      19     1     3     2

推荐阅读