如何找到 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
我有以下称为站的数组:
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