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下次你可以简单地编辑上一个问题而不是创建一个新问题,这是完全可以接受的。