【问题标题】:How to calculate a mean depending on another logical column using dplyr?如何使用 dplyr 根据另一个逻辑列计算平均值?
【发布时间】:2020-05-11 09:06:01
【问题描述】:

我是 R 的新手。我正在尝试在表上使用 group_by 来根据另一个逻辑列生成平均值。

这是一个示例数据集:

   code   value datedate   dummytime Morning Afternoon Evening
   <chr> <dbl> <chr>      <chr>     <lgl>   <lgl>     <lgl>  
  1 G002   4.59 2020-05-01 05:00:00  FALSE   FALSE     FALSE  
  2 G002   3.84 2020-05-01 05:30:00  FALSE   FALSE     FALSE  
  3 G002   3.61 2020-05-01 06:00:00  TRUE    FALSE     FALSE  
  4 G002   3.51 2020-05-01 06:30:00  TRUE    FALSE     FALSE  
  5 G002   3.31 2020-05-01 07:00:00  TRUE    FALSE     FALSE  
  6 G002   3.12 2020-05-01 07:30:00  FALSE   FALSE     FALSE  
  7 G002   5.04 2020-05-01 08:00:00  FALSE   FALSE     FALSE  
  8 G002   4.82 2020-05-01 08:30:00  FALSE   FALSE     FALSE  
  9 G002   4.33 2020-05-01 09:00:00  FALSE   FALSE     FALSE  
 10 G002   4.59 2020-05-01 09:30:00  FALSE   FALSE     FALSE
 11 G002   3.84 2020-05-01 10:00:00  FALSE   FALSE     FALSE
 12 G002   3.61 2020-05-01 10:30:00  FALSE   FALSE     FALSE
 13 G002   3.51 2020-05-01 11:00:00  FALSE   FALSE     FALSE
 14 G002   3.31 2020-05-01 11:30:00  FALSE   FALSE     FALSE
 15 G002   3.12 2020-05-01 12:00:00  FALSE   FALSE     FALSE
 16 G002   5.04 2020-05-01 12:30:00  FALSE   TRUE      FALSE
 17 G002   4.82 2020-05-01 13:00:00  FALSE   TRUE      FALSE
 18 G002   4.33 2020-05-01 13:30:00  FALSE   TRUE      FALSE

有没有一种简单的方法使用 dplyr 来产生这样的结果:

code meanMorning meanAfternoon meanEvening
G002 3.48        4.73          NA

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用summarise_at 将一个函数应用于多个列。

    library(dplyr)
    
    df %>%
      group_by(code) %>%
      summarise_at(vars(Morning:Evening), list(mean = ~mean(value[.], na.rm = TRUE)))
    
    # A tibble: 1 x 4
    #  code  Morning_mean Afternoon_mean Evening_mean
    #  <chr>        <dbl>          <dbl>        <dbl>
    #1 G002          3.48           4.73          NaN
    

    请注意,summarise_at 很快将在 dplyr 的下一版本中替换为 across

    【讨论】:

    • 太好了,感谢您的回复!是否可以将此汇总与最大值列结合起来?
    • 对不起,最大值列是什么意思?
    • 如何将您的解决方案与我可能想做的其他总结结合起来。例如,如果我想添加:summarise(MaxFlow = max(value)).
    • 据我所知,不可能在一个summarise 中做到这一点。(尽管across 可以做到这一点)。现在,你可以做类似df %&gt;% group_by(code) %&gt;% group_by(MaxFlow = max(value), add = TRUE) %&gt;% summarise_at(vars(Morning:Evening), list(mean = ~mean(value[.], na.rm = TRUE)))
    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 2018-04-15
    • 2017-12-23
    • 2021-06-14
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多