如何找到 R 中数组中列的每年特定季节的最大值、最小值?

How to find the max,min value for specific season per year of a column in an array in R?

我有以下称为站的数组:

A1 <- matrix(runif(120),24,5)
A1[1:12,1]<-2012
A1[13:24,1]<-2013
A1[1:12,2]<-(1:12)
A1[13:24,2]<-(1:12)
A1[1:12,3]<-seq(1,24,by=2)
A1[13:24,3]<-seq(1,24,by=2)

A2 <- matrix(runif(120),24,5)
A2[1:12,1]<-2012
A2[13:24,1]<-2013
A2[1:12,2]<-(1:12)
A2[13:24,2]<-(1:12)
A2[1:12,3]<-seq(1,24,by=2)
A2[13:24,3]<-seq(1,24,by=2)

station <- array(NA,c(24,5,2))
station[,,1] <- A1
station[,,2] <- A2
dimnames(station)[[2]]<-c('year','month','day','win_3','win_7')
dimnames(station)[[3]]<-c('station1','station2')
print(station)

我想提取每个站点每年 win_3 到 spring 季节(即第 3、4 和 5 个月)的最大值 win_3 和指定天和月的相应值(3,4 或 5)。

对于最小值,我想从 win_7 中提取它,我将其称为 Min_7Days 到每个站点每年的夏季(即第 6、7 和 8 个月)并指定月(6,7 或 8)和日的对应值

如果可能的话,我想将结果保存为数组格式

结果应该是这样的:

, , 1
                   Year Month day   Max_3Days   Year    Month  Day Min_7Days
  [1,]              2012     3   15      2800     2012      6    1       400
  [2,]              2013     4   2       2730     2013      6    4       100        

, , 2
                   Year Month day   Max_3Days   Year    Month  Day Min_7Days 
  [1,]              2012     4   15      2800     2012      7    10      250
  [2,]              2013     5   2       2750     2013      7    14      271        

我确实指定了 spring 和夏季,并在我只有一个站点作为数据帧格式时找到了最大值、最小值,我想对(矩阵)中的大约 70 个站点执行此操作数组格式,我想将结果保存在数组中:

如果是数据帧(只有一个站):

Summer<-station[which(station$month>"5"&station$month<"9"),]
Minima<-ddply(Summer, ~ year, summarise, month=month[which.min(win_7)],day=day[which.min(win_7)], Min_7Days =min(win_7, na.rm = TRUE))

Spring<-station[which(station$month>"2"&station$month<"6"),]
Maxima<-ddply(Spring, ~ year, summarise, month=month[which.max(win_3)],day=day[which.max(win_3)], Max_3Days =max(win_3, na.rm = TRUE))

如有任何建议,我们将不胜感激!!

目前我已经把它们做成list然后继续了。

l = vector('list', 2)
l[[1]] = data.frame(station[,,1])
l[[2]] = data.frame(station[,,2])

spring_end   <- 5
spring_start <- 3
summer_end   <- 8
summer_start <- 6

library(dplyr)
func <- function(df){

  df %>% group_by(year) %>% 
         summarise(   Max_3Days    = max(win_3[between(month, spring_start, spring_end)]),
                      Month_spring = month[between(month, spring_start, spring_end)][which.max(win_3[between(month, spring_start, spring_end)])],
                      Min_7Days    = min(win_7[between(month, summer_start, summer_end)]),
                      Month_summer = month[between(month, summer_start, summer_end)][which.min(win_7[between(month, summer_start, summer_end)])])
}

lapply(l, func)

#[[1]]
#   year Max_3Days Month_spring Min_7Days Month_summer
#1  2012 0.6521762            5 0.3547476            6
#2  2013 0.9627131            3 0.1754293            6

#[[2]]
#   year Max_3Days Month_spring  Min_7Days Month_summer
#1  2012 0.6115331            5 0.08505264            6
#2  2013 0.6051239            3 0.10938192            8