我正在处理在各个空气质量站测量的每小时污染物数据。我想在一个 DF 中获得所有站的日平均值。
日期 | 站点a | 站点 b | 站点 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 |
我想:
日期 | 站点a | 站点 b | 站点 c |
---|---|---|---|
2010-01-01 | 2 | 2 | 2 |
daylyavg <- df %>%
group_by(Month, Day) %>%
summarize(Avg_a = mean(site a))
月 | 天 | 平均_a |
---|---|---|
1 | 1 | 2 |
答案 0 :(得分:2)
这是一种使用 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)
)