看,我想做什么:[在Excel中清晰简单,但在R中我有一个问题...... :(]
Column A 1 2 3 4 5
Column B 0 9 2 1 7
这是我真正的“算法”:
Column C
(first value) = mean(Column A) = 3
(second value) = ((mean(Column A)*4) + 0)/5 = 2,4
(third value) = ((second value*4) + 9)/5 = 3,72
etc.
所以我们有:
# A B C
# 1 1 0 3
# 2 2 9 2,4
# 3 3 2 3,72
# 4 4 1 3,37
# 5 5 7 2,90
这是我的实际代码与您的建议:
a <- c(1:5)
b <- c(0,9,0,1,7,0)
matrix <- data.frame(A=a,B=b)
matrix <- c(mean(matrix$A), (cumsum(matrix$B) + (mean(matrix$A)*4))/5)
这是解决方案:2.4 4.2 4.2 4.4 5.8(错误!!)
当然R写错误说:“替换有6行,数据有5”,但这不相关......我只想知道,我该怎么办?
答案 0 :(得分:1)
您可以使用?cumsum
:
a <- 1:5
b <- c(0, 9, 2, 1, 7)
mean(a) + cumsum(b)
# [1] 3 12 14 15 22
<强>更新强>
您似乎想要运行(加权)移动平均线。也许你应该看一下TTR package。
请在下面找到一个简单的方法:
wma <- function(b, startValue, a=4/5) {
m <- double(length(b)+1)
m[1] <- startValue
for (i in seq(along=b)) {
m[i+1] <- a * m[i] + (1-a) * b[i]
}
return(m)
}
wma(b, mean(a))
# [1] 3.00000 2.40000 3.72000 3.37600 2.90080 3.72064
答案 1 :(得分:0)
这解决了您的问题:
mydf<-data.frame(A=1:5, B=c(0,9,2,1,7))
mydf$C<-cumsum(mydf$B)+mean(mydf$A)
mydf
# A B C
# 1 1 0 3
# 2 2 9 12
# 3 3 2 14
# 4 4 1 15
# 5 5 7 22
希望它有所帮助。