我试图在向量的片段上找到运行总和。我查看了runSum函数,但无法使其工作,因为首先它需要一个" n"这导致所有值小于n的NA。第二,我无法通过将它与sapply
和split
组合在一起来运行它。例如,这样的代码不起作用:sapply(split(x, by = y), runSum)
x:是我想要在分割它或用y分割它之后总结的向量
x <- c(5,8,7,9,13,10,8,4,7,12,14,11,9,8,12,13,16,8,8,5,6,6,6,4,8,11,12,13,15,14)
y <- c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6)
我将展示向量的前10个元素的期望结果,它是前2个区间和第3个区域的第一个元素,称为目标波纹管。
target <- c(5,13,20,29,13,23,31,35,42,12)
答案 0 :(得分:1)
只需使用tapply
和cumsum
:
tapply(x, y, cumsum)
# $`1`
# [1] 5 13 20 29
#
# $`2`
# [1] 13 23 31 35 42 54
#
# $`3`
# [1] 14 25 34 42 54
#
# $`4`
# [1] 13 29 37
#
# $`5`
# [1] 8 13 19 25 31 35
#
# $`6`
# [1] 8 19 31 44 59 73
使用unlist
获取类似你的&#34;目标&#34;矢量。
答案 1 :(得分:0)
另一种方法是将cumsum
与ave
:
> ave(x, y, FUN=cumsum)
# [1] 5 13 20 29 13 23 31 35 42 54 14 25 34 42 54
# [16] 13 29 37 8 13 19 25 31 35 8 19 31 44 59 73