R 将日值相加为月值

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

我试图将每天的降雨量总和计算成每月的总降雨量,这是一个超过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月的所有降雨天数。。。。至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