r 中每月数据的几个月平均值
Mean of few months for a monthly data in r
我想找到从 11 月到 3 月的月份的平均值,比如 1982 年 11 月到 1983 年 3 月。然后,对于我的结果,我想要一个包含年份的列和另一个列的平均值。如果均值为 1983 年 3 月,我希望将年份与该均值一起显示为 1983 年。
This is how my data looks like.
我希望我的结果看起来像这样。
1983 29.108
1984 26.012
我对 R 包不是很好,如果有一个简单的方法可以做到这一点。我真的很感激任何帮助。谢谢。
您可以使用 tidyverse
执行此操作
require(tidyverse)
year <- rep(1982:1984, 3)
month <- rep(1:12, 3)
value <- runif(length(month))
dat <- data.frame(year, month, value)
head(dat)
dat
看起来像你的数据
# A tibble: 3 × 2
year value
<int> <dbl>
1 1982 0.450
2 1983 0.574
3 1984 0.398
然后的诀窍是 group_by
和 summarise
dat %>%
group_by(year) %>%
summarise(value = mean(value))
哪个给你
# A tibble: 3 × 2
year value
<int> <dbl>
1 1982 0.450
2 1983 0.574
3 1984 0.398
使用 dplyr
# remove the "#" before in the begining of the next line if dplyr or tidyverse is not installed
#install.packages("dplyr")
library(dplyr) #reading the library
colnames(df) <- c("year","month","value") #here I assumed your dataset is named df
df<- df%>%
group_by(year) %>%
summarize(av_value =mean(value))
这是获取每年 11 月至 3 月平均值的一种方法。
library(dplyr)
df %>%
#Remove data for month April-October
filter(!between(month, 4, 10)) %>%
#arrange the data by year and month
arrange(year, month) %>%
#Remove 1st 3 months of the first year and
#last 2 months of last year
filter(!(year == min(year) & month %in% 1:3 |
year == max(year) & month %in% 11:12)) %>%
#Create a group column for every November entry
group_by(grp = cumsum(month == 11)) %>%
#Take average for each year
summarise(year = last(year),
value = mean(value)) %>%
select(-grp)
# A tibble: 2 x 2
# year value
# <int> <dbl>
#1 1982 0.308
#2 1983 -0.646
数据
如果您以易于复制的可重现格式提供数据,就更容易提供帮助。
set.seed(123)
df <- data.frame(year = rep(1981:1983, each = 12),month = 1:12,value = rnorm(36))
我想找到从 11 月到 3 月的月份的平均值,比如 1982 年 11 月到 1983 年 3 月。然后,对于我的结果,我想要一个包含年份的列和另一个列的平均值。如果均值为 1983 年 3 月,我希望将年份与该均值一起显示为 1983 年。 This is how my data looks like.
我希望我的结果看起来像这样。
1983 29.108
1984 26.012
我对 R 包不是很好,如果有一个简单的方法可以做到这一点。我真的很感激任何帮助。谢谢。
您可以使用 tidyverse
require(tidyverse)
year <- rep(1982:1984, 3)
month <- rep(1:12, 3)
value <- runif(length(month))
dat <- data.frame(year, month, value)
head(dat)
dat
看起来像你的数据
# A tibble: 3 × 2
year value
<int> <dbl>
1 1982 0.450
2 1983 0.574
3 1984 0.398
然后的诀窍是 group_by
和 summarise
dat %>%
group_by(year) %>%
summarise(value = mean(value))
哪个给你
# A tibble: 3 × 2
year value
<int> <dbl>
1 1982 0.450
2 1983 0.574
3 1984 0.398
使用 dplyr
# remove the "#" before in the begining of the next line if dplyr or tidyverse is not installed
#install.packages("dplyr")
library(dplyr) #reading the library
colnames(df) <- c("year","month","value") #here I assumed your dataset is named df
df<- df%>%
group_by(year) %>%
summarize(av_value =mean(value))
这是获取每年 11 月至 3 月平均值的一种方法。
library(dplyr)
df %>%
#Remove data for month April-October
filter(!between(month, 4, 10)) %>%
#arrange the data by year and month
arrange(year, month) %>%
#Remove 1st 3 months of the first year and
#last 2 months of last year
filter(!(year == min(year) & month %in% 1:3 |
year == max(year) & month %in% 11:12)) %>%
#Create a group column for every November entry
group_by(grp = cumsum(month == 11)) %>%
#Take average for each year
summarise(year = last(year),
value = mean(value)) %>%
select(-grp)
# A tibble: 2 x 2
# year value
# <int> <dbl>
#1 1982 0.308
#2 1983 -0.646
数据
如果您以易于复制的可重现格式提供数据,就更容易提供帮助。
set.seed(123)
df <- data.frame(year = rep(1981:1983, each = 12),month = 1:12,value = rnorm(36))