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_bysummarise

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))