基于分组R组合/合并同一数据框中的行

时间:2020-01-30 15:36:53

标签: 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,我想将数据合并到同一行中。所需结果:

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

我绝对可以通过过滤和联接的组合来完成此任务,但是使用我的实际数据框,这将是很多代码且效率很低。 我正在寻找一种更优雅的方式来“压缩”此数据框。

1 个答案:

答案 0 :(得分:1)

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