首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从R中的大数据创建循环代码?

如何从R中的大数据创建循环代码?
EN

Stack Overflow用户
提问于 2022-01-15 20:34:14
回答 1查看 57关注 0票数 0

我有一个数据系列的每天雪深度值在60年期间。我希望看到每一个季节的积雪深度都超过30厘米的天数,例如从1980年7月到1981年6月。这个代码应该是什么样子的?我知道如何单独计算每个季节超过30厘米的日数值,但不知道代码如何计算所有季节。我已将我的数据上传到wetransfer:达菲

非常感谢您的提前帮助。佩尼拉

EN

回答 1

Stack Overflow用户

发布于 2022-01-15 23:50:09

下面是一种使用aggregate()函数的方法。读取数据后,将Date字段转换为date对象,并删除日期中缺少值的行:

代码语言:javascript
复制
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 ...

请注意,超过一半的数据缺少日期的值。现在我们需要将数据除以滑雪季节:

代码语言:javascript
复制
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英寸雪的天数:

代码语言:javascript
复制
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

此外,您还可以获得其他统计数据,如本季节的最大降雪量或总下雪量:

代码语言:javascript
复制
maxsnow <- aggregate(SHincm~Season, snow, max)
totalsnow <- aggregate(SHincm~Season, snow, sum)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70725212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档