runFun在向量的段上

时间:2014-04-07 17:49:18

标签: r

我试图在向量的片段上找到运行总和。我查看了runSum函数,但无法使其工作,因为首先它需要一个" n"这导致所有值小于n的NA。第二,我无法通过将它与sapplysplit组合在一起来运行它。例如,这样的代码不起作用: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)

2 个答案:

答案 0 :(得分:1)

只需使用tapplycumsum

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)

另一种方法是将cumsumave

一起使用
> 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