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

Lau*_*ra 3 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   
Run Code Online (Sandbox Code Playgroud)

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

     88  89  90  91      
22   1   2   5   14 
23   1   7   11  20   
24   2   6   19  22  
25   3   5   13  39   
Run Code Online (Sandbox Code Playgroud)

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

     Y1  Y2  Y3  Y4      
22   A1  B1  C1  D1 
23   A2  B2  C2  D2   
24   A3  B3  C3  D3   
25   A4  B4  C4  D4   
Run Code Online (Sandbox Code Playgroud)

最终数据集:

     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   
Run Code Online (Sandbox Code Playgroud)

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

我已经看到了这个问题如何总结数据帧的对角线,但他只想要总和,我想要迭代总和.

谢谢.

G. *_*eck 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
Run Code Online (Sandbox Code Playgroud)

假设它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))
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢这个有用的答案.不幸的是,我的数据框是一个30列和49行的矩形,而不是正方形.您的代码适用于中央对角线,但不适用于其他对角线.你知道如何编辑这段代码,使Y2:22 = B1,Y3:23 = B1 + C2等.谢谢. (2认同)