【问题标题】:group by many columns and calculate mean按多列分组并计算平均值
【发布时间】:2021-07-07 22:58:43
【问题描述】:

我正在处理在各个空气质量站测量的每小时污染物数据。我想获得一个 DF 中所有站点的每日平均值。

date site a site b site c
2010-01-01 00:00:00 3 2 1
2010-01-01 01:00:00 2 2 2
2010-01-01 02:00:00 1 2 3

我想:

date site a site b site c
2010-01-01 2 2 2
daylyavg <- df %>%
  group_by(Month, Day) %>%
  summarize(Avg_a = mean(site a))
Month day Avg_a
1 1 2

【问题讨论】:

  • 请记住,在 R 中,最好列名不包含空格。

标签: r dataframe dplyr lubridate


【解决方案1】:

这是一种使用dplyr::across的方法:

library(tidyverse); library(lubridate)

my_data %>%
  mutate(date = ymd_hms(date)) %>%  # in case not already POSIXct date-time
  
  mutate(month = month(date),
         day = day(date)) %>%

  group_by(month, day) %>%
  summarize(across(starts_with("site"), mean,
                   .names = "Avg_{.col}")) %>%
  ungroup()

结果:

  month   day Avg_site.a Avg_site.b Avg_site.c
  <dbl> <int>      <dbl>      <dbl>      <dbl>
1     1     1          2          2          2

数据:

my_data <- data.frame(
        date = c("2010-01-01 00:00:00",
                 "2010-01-01 01:00:00","2010-01-01 02:00:00"),
      site.a = c(3L, 2L, 1L),
      site.b = c(2L, 2L, 2L),
      site.c = c(1L, 2L, 3L)
)

【讨论】:

    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 2020-04-20
    • 2021-12-11
    相关资源
    最近更新 更多