我有一个 .csv 文件,其中包含两列中的每月平均数据:
Date, Mean
200601, 45
200602, 93
200603, 76
..
..
..
2001005, 54
(日期格式为yyyymm)
我想计算每年 1 月份的平均值,即(2006 年 1 月、2007 年……到 2010 年)以及类似的 2 月……到 12 月
我正在尝试在 R 中使用聚合函数来执行此操作,但由于年月日期格式(没有日),我收到了错误。谁能帮忙。
首先,您应该将日期列转换为日期而不是数字。您可以使用
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 创建
首先从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))