R 将日值相加为月值
我试图将每天的降雨量总和计算成每月的总降雨量,这是一个超过100年的记录。我的数据采用以下形式:R 将日值相加为月值,r,R,我试图将每天的降雨量总和计算成每月的总降雨量,这是一个超过100年的记录。我的数据采用以下形式: Year Month Day Rain 1890 1 1 0 1890 1 2 3.1 1890 1 3 2.5 1890 1 4 15.2 在上面的例子中,我想用R来计算1890年1月,然后是1890年2月,1890年3
Year Month Day Rain
1890 1 1 0
1890 1 2 3.1
1890 1 3 2.5
1890 1 4 15.2
在上面的例子中,我想用R来计算1890年1月,然后是1890年2月,1890年3月的所有降雨天数。。。。至2010年12月。我想我要做的是创建一个循环来求和值。我的输出文件应该如下所示:
Year Month Rain
1890 1 80.5
1890 2 72.4
1890 3 66.8
1890 4 77.2
有什么简单的方法吗
非常感谢。您可以使用
dplyr
获得一些令人愉快的语法
library(dplyr)
df %>%
group_by(Year, Month) %>%
summarise(Rain = sum(Rain))
在某些情况下,将其转换为时间序列类(如
xts
)是有益的,然后可以使用apply.monthly()
等函数
数据:
查看
?聚合。如果您的数据位于名为dd
的data.frame中,则类似于aggregate(雨~年+月,dd,sum)
。无需循环。非常感谢您的回复@MrFlick。不幸的是,这会给出以下错误消息:汇总中出错(1L、1373L、1077L、750L、1605L、543L、91L、1114L,:“sum”对于factors没有意义,这意味着您的数据可能被错误地读入了R。从您的示例中,Rain似乎是一个数字列,但您的错误意味着它是一个factor列。请检查其中的非数字值。事实上,您是对的@MrFlick比read.table so没有得到数值。现在排序。这种方法的最后一个问题是:我的输出现在组织为1890年1月、1891年1月、1892年1月等,而不是1890年1月、1890年2月、1890年3月等。有没有简单的方法来重新组织序列?感谢@cdeterman的评论。不幸的是,我似乎无法安装dplyr包age。我收到一条消息,说包已成功解包并检查了MD5 syms,但当我加载它时,库未找到。@DJ-AFC,它还说了什么?仅凭这些信息很难排除故障。请尝试重新启动R并重新安装包。这是除聚合函数之外的另一种简单方法。谢谢对于注释@J.R.,这是一个有趣的解决方案,但在我的原始数据中缺少日期的情况下,它不起作用-因此,将这些日期绑定到我的原始数据是不可能的。这只是一个示例。缺少日期没有问题,只需使用您自己的日期,而不是我的日期序列。@DJ-AFC我将示例更新为ma让它更适合你的情况。
df <- data.frame(
Year = rep(1890,5),
Month = c(1,1,1,2,2),
Day = 1:5,
rain = rexp(5)
)
> head(df)
Year Month Day rain
1 1890 1 1 0.1528641
2 1890 1 2 0.1603080
3 1890 1 3 0.5363315
4 1890 2 4 0.6368029
5 1890 2 5 0.5632891
library(xts)
dates <- with(df, as.Date(paste(Year, Month, Day), format("%Y %m %d")))
myXts <- xts(df$rain, dates)
> head(apply.monthly(myXts, sum))
[,1]
1890-01-03 0.8495036
1890-02-05 1.2000919