以递增方式的数据帧的独立行的总和

时间:2015-05-05 15:22:31

标签: r matrix

我的data.frame是100x100,我需要将它们总结为自动扶梯。从第一列的第一个条目开始,然后继续将第二列的第一个条目添加到第一个条目的第二个条目,依此类推,直到最后一个sum的条目是最后一列的最后一行。将其视为对角矩阵,例如

d3 <- data.frame(a = c(rep(0.5,5),0,0), b = c(0,rep(0.3,5),0), e = c(0,0,rep(0.8,5)))

可能有助于理解问题。我想对像d3这样的矩阵的行求和。

我尝试创建一个小例子,但我还没有能够创建一个简化工作的循环或功能。

我有这些数据:

d <- data.frame(a = rep(0.5,5), b = rep(0.3,5), e = rep(0.8,5))

我需要一种方法来创建一个带有条目的矢量:

d2 <- rep(NA)
d2[1] <- d$a[1]
d2[2] <- sum(d$a[2],d$b[1])
d2[3] <- sum(d$a[3],d$b[2],d$e[1])
d2[4] <- sum(d$a[4],d$b[3],d$e[2])
d2[5] <- sum(d$a[5],d$b[4],d$e[3])
d2[6] <- sum(d$b[5],d$e[4])
d2[7] <- d$e[5]

等于c(0.5, 0.8, 1.6, 1.6, 1.6, 1.1, 0.8)

提前感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您可以尝试

m1 <- as.matrix(d)
unname(tapply(m1, col(m1)+row(m1), FUN=sum))
#[1] 0.5 0.8 1.6 1.6 1.6 1.1 0.8

答案 1 :(得分:1)

您可以尝试:

 rowSums(
    mapply(function(x,y) {
       ret<-numeric(nrow(d)+ncol(d)-1)
       ret[y:(y+length(x)-1)]<-x
       ret},d,1:(length(d)))
 )