如何使用dplyr根据另一个逻辑列计算平均值?

我是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
评论
  • ueaque
    ueaque 回复

    We can use summarise_at to apply a function to multiple columns.

    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