如何使用R中的聚合函数计算不同年份相同月份的平均值?

问题描述 投票:0回答:2

我有一个 .csv 文件,其中包含两列中的每月平均数据:

Date, Mean
200601, 45
200602, 93
200603, 76
..
..
..
2001005, 54

(日期格式为yyyymm)

我想计算每年 1 月份的平均值,即(2006 年 1 月、2007 年……到 2010 年)以及类似的 2 月……到 12 月

我正在尝试在 R 中使用聚合函数来执行此操作,但由于年月日期格式(没有日),我收到了错误。谁能帮忙。

r aggregate mean raster
2个回答
0
投票

首先,您应该将日期列转换为日期而不是数字。您可以使用

lubridate
包来做到这一点。在这种情况下,您的格式是年份后跟月份,因此您可以使用
ym()
将格式转换为日期。

然后你可以使用

month()
函数获取每个月。我喜欢用 tidyverse,所以你也可以用
group_by()

library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
data <- tibble(
  date = c(200205, 200206, 200305),
  value = c(2,3,4)
)
data
#> # A tibble: 3 × 2
#>     date value
#>    <dbl> <dbl>
#> 1 200205     2
#> 2 200206     3
#> 3 200305     4

data %>% 
  mutate(date = ym(date)) %>% 
  group_by(month = month(date)) %>% 
  summarise(avg = mean(value))
#> # A tibble: 2 × 2
#>   month   avg
#>   <dbl> <dbl>
#> 1     5     3
#> 2     6     3

reprex 包 (v2.0.1) 于 2023-04-15 创建


0
投票

首先从Date中提取Month部分,然后使用

aggregate

df$Month <- sub("^\\d{4}", "", df$Date)

aggregate(Mean ~ Month, df, sum)
   Month Mean
1     01  118
2     02   68
3     03   66
4     04  101
5     05   54
6     06  105
7     07   81
8     08  111
9     09  129
10    10  131
11    11  130
12    12   50

数据

df <- structure(list(Date = c("200601", "200602", "200603", "200604", 
"200605", "200606", "200607", "200608", "200609", "200610", "200611", 
"200612", "200701", "200702", "200703", "200704", "200705", "200706", 
"200707", "200708", "200709", "200710", "200711", "200712", "200801"
), Mean = c(49L, 65L, 25L, 74L, 18L, 100L, 47L, 24L, 71L, 89L, 
37L, 20L, 26L, 3L, 41L, 27L, 36L, 5L, 34L, 87L, 58L, 42L, 93L, 
30L, 43L)), class = "data.frame", row.names = c(NA, -25L))
© www.soinside.com 2019 - 2024. All rights reserved.