【问题标题】:Combining/joining rows within the same dataframe based on grouping R [duplicate]基于分组R在同一数据框中组合/连接行[重复]
【发布时间】:2020-05-16 06:32:21
【问题描述】:

我正在执行一个 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


    【解决方案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
    

    【讨论】:

    • 哇,这很简单,而且肯定有点偷偷摸摸......但就我的目的而言,我认为这应该可行。现在正在查看数据。
    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 2019-12-20
    • 2016-10-30
    • 1970-01-01
    • 2021-11-01
    • 2013-11-17
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多