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