R 每12个月总结一次

R 每12个月总结一次,r,R,我之前发布了这个问题,但这些建议并没有太大帮助,可能是因为问题不清楚。非常抱歉,交叉邮寄。我的数据看起来像 Months value 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 1 0 2 0 3 0 4 20.32 5 45.212 6 27.178 7 0 8 0 9 0 10 0 11 0 12 0 不,我想在一个地方加上所有12个月,得到新的值

我之前发布了这个问题,但这些建议并没有太大帮助,可能是因为问题不清楚。非常抱歉,交叉邮寄。我的数据看起来像

Months  value
 1  0
 2  0
 3  0
 4  0
 5  0
 6  0
 7  0
 8  0
 9  0
 10 0
 11 0
 12 0
 1  0
 2  0
 3  0
 4  20.32
 5  45.212
 6  27.178
 7  0
 8  0
 9  0
 10 0
 11 0
 12 0
不,我想在一个地方加上所有12个月,得到新的值,这样我的anwser在前12个月为0,在后12个月为92.71。我有150年的数据,请问有代码吗?
Rosy

我们可以在创建分组变量后使用其中一个聚合函数。假设“月”列已排序,创建分组变量(
cumsum(df1$Months==1)
)并获取
sum

 tapply(df1$value, cumsum(df1$Months==1), FUN=sum, na.rm=TRUE)
 #   1     2 
 #0.00 92.71 
或使用
data.table

 library(data.table)
 setDT(df1)[, list(SumValue=sum(value, na.rm=TRUE)),
              by=list(Group=cumsum(Months==1))]
 #   Group SumValue
 #1:     1     0.00
 #2:     2    92.71
我们还可以使用
gl

 as.numeric(gl(nrow(df1), 12, nrow(df1)))
 #[1] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2

假设您的数据实际上是有序且完整的,就像您在示例数据中描述的那样,您只需将“value”列转换为矩阵,并在其上使用
行和

matrix(mydf$value, ncol = 12, byrow = TRUE)
#      [,1] [,2] [,3]  [,4]   [,5]   [,6] [,7] [,8] [,9] [,10] [,11] [,12]
# [1,]    0    0    0  0.00  0.000  0.000    0    0    0     0     0     0
# [2,]    0    0    0 20.32 45.212 27.178    0    0    0     0     0     0
rowSums(matrix(mydf$value, ncol = 12, byrow = TRUE))
# [1]  0.00 92.71

否则,将需要更多的信息来确保年份分组是可能的(正如@akrun的回答所做的那样)。

反过来看@Metrics的可能重复。这个问题的版本实际上是好的。前一个是可怕的,应该关闭作为一个愚弄这。更不用说在另一个问题中没有答案了。@rosyrana下次你可以简单地编辑上一个问题而不是创建一个新问题,这是完全可以接受的。