gpt4 book ai didi

r - 使用 r 中的栅格包聚合季节性方法

转载 作者:行者123 更新时间:2023-12-01 13:19:44 26 4
gpt4 key购买 nike

我正在尝试将每日数据(35 年)聚合到月度数据,然后使用 R 中的栅格包计算季节性平均值(我知道如何使用 CDO 进行计算)。下面是我的代码,它输出所有年份的 4 个季节性平均值(140 层)。我怎样才能循环只输出 4 层(对于 4 个季节)?我感谢您的帮助。

dailydata <- brick ("dailyrain.nc")  
dates <- seq(as.Date("1981-01-01"), as.Date("2015-12-31"), by="day")
months <- format(dates, "%Y-%m")

Aggregate2Monthly <- function(x) {
agg <- aggregate(x, by=list(months), sum)
return(agg$x)
}
mothlydata <- calc(dailydata, Aggregate2Monthly)

mondates <- seq(as.Date("1981-01-01"), as.Date("2015-12-31"), by="month")
years <- format(mondates, "%Y")
seasons.def=c(1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4)
years.seasons <- paste(years, seasons.def, sep="-")

nyears <- years[!duplicated(years)]
nseas <- seasons.def[!duplicated(seasons.def)]

Aggregate2Seasons <- function(x) {
agg <- aggregate(x, by=list(years.seasons), mean)
return(agg$x)
}
seasonsdata <- calc(mothlydata, Aggregate2Seasons)

最佳答案

您想按年和月的组合进行聚合。

months <- format(dates, "%Y-%m")

分组月份(根据您的评论):

groups <- function(x) {
d <- as.POSIXlt(x)

ans <- character(length(x))
ans[d$mon %in% 0:1] <- "JF"
ans[d$mon %in% 2:4] <- "MAM"
ans[d$mon %in% 5:8] <- "JJAS"
ans[d$mon %in% 9:11] <- "OND"
ans
}

现在使用 groups(dates) 作为分组变量。检查:

data.frame(dates, groups(dates))
## dates groups.dates.
## 1 1981-01-01 JF
## 2 1981-01-02 JF
## 3 1981-01-03 JF
## 4 1981-01-04 JF
## 5 1981-01-05 JF
## 6 1981-01-06 JF

关于r - 使用 r 中的栅格包聚合季节性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com