矩阵R中的乘法

时间:2013-07-18 09:34:50

标签: r matrix multiplication

看,我想做什么:[在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”,但这不相关......我只想知道,我该怎么办?

2 个答案:

答案 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

希望它有所帮助。