如何迭代求和R中入射表的对角线

时间:2018-01-31 21:21:16

标签: r sum

我有一个疾病事件案例的数据框。年龄和年龄,看起来像这样(它比这个例子大得多)

     88  89  90  91      
22   1   2   5   14 
23   1   6   9   15   
24   2   5   12  11  
25   3   3   7   20   

我想做的是迭代求和对角线,得到这个结果

     88  89  90  91      
22   1   2   5   14 
23   1   7   11  20   
24   2   6   19  22  
25   3   5   13  39   

或者换一种方式;原始数据集:

     Y1  Y2  Y3  Y4      
22   A1  B1  C1  D1 
23   A2  B2  C2  D2   
24   A3  B3  C3  D3   
25   A4  B4  C4  D4   

最终数据集:

     Y1  Y2     Y3        Y4      
22   A1  B1     C1        D1 
23   A2  A1+B2  B1+C2     C1+D2   
24   A3  A2+B3  A1+B2+C3  B1+C2+D3   
25   A4  A3+B4  A2+B3+C4  A1+B2+C3+D4   

在R中有没有办法做到这一点?

我已经看到了这个问题How to sum over diagonals of data frame,但他只想要总和,我想要迭代总和。

感谢。

1 个答案:

答案 0 :(得分:6)

使用ave注意row(m) - col(m)在对角线上是常数:

ave(m, row(m) - col(m), FUN = cumsum)
##    88 89 90 91
## 22  1  2  5 14
## 23  1  7 11 20
## 24  2  6 19 22
## 25  3  5 13 39

假设m是一个矩阵,如下面的注释所示。如果您有数据框,则首先将其转换为矩阵。

注意

可重现形式的输入矩阵m是:

Lines <- "     88  89  90  91      
22   1   2   5   14 
23   1   6   9   15   
24   2   5   12  11  
25   3   3   7   20"
m <- as.matrix(read.table(text = Lines, check.names = FALSE))