我有一个数据系列的每天雪深度值在60年期间。我希望看到每一个季节的积雪深度都超过30厘米的天数,例如从1980年7月到1981年6月。这个代码应该是什么样子的?我知道如何单独计算每个季节超过30厘米的日数值,但不知道代码如何计算所有季节。我已将我的数据上传到wetransfer:达菲上
非常感谢您的提前帮助。佩尼拉
发布于 2022-01-15 23:50:09
下面是一种使用aggregate()函数的方法。读取数据后,将Date字段转换为date对象,并删除日期中缺少值的行:
snow <- read.table("BayrischerWald_Brennes_SH_daily_merged.txt", header=TRUE, sep=";")
snow$Day <- as.Date(snow$Day)
str(snow)
# 'data.frame': 51606 obs. of 2 variables:
# $ Day : Date, format: "1961-11-01" "1961-11-02" "1961-11-03" "1961-11-04" ...
# $ SHincm: int 0 0 0 0 2 9 19 22 15 5 ...
snow <- snow[!is.na(snow$Day), ]
str(snow)
# 'data.frame': 21886 obs. of 2 variables:
# $ Day : Date, format: "1961-11-01" "1961-11-02" "1961-11-03" "1961-11-04" ...
# $ SHincm: int 0 0 0 0 2 9 19 22 15 5 ...请注意,超过一半的数据缺少日期的值。现在我们需要将数据除以滑雪季节:
brks <- as.Date(paste(1961:2022, "07-01", sep="-"))
lbls <- paste(1961:2021, 1962:2022, sep="/")
snow$Season <- cut(snow$Day, breaks=brks, labels=lbls)现在我们使用aggregate()来获取超过30英寸雪的天数:
days30cm <- aggregate(SHincm~Season, snow, subset=snow$SHincm > 30, length)
colnames(days30cm)[2] <- "Over30cm"
head(days30cm, 10)
# Season Over30cm
# 1 1961/1962 1
# 2 1967/1968 129
# 3 1968/1969 60
# 4 1969/1970 107
# 5 1970/1971 43
# 6 1972/1973 101
# 7 1973/1974 119
# 8 1974/1975 188
# 9 1975/1976 126
# 10 1976/1977 112此外,您还可以获得其他统计数据,如本季节的最大降雪量或总下雪量:
maxsnow <- aggregate(SHincm~Season, snow, max)
totalsnow <- aggregate(SHincm~Season, snow, sum)https://stackoverflow.com/questions/70725212
复制相似问题