我有一个疾病事件案例的数据框.按年份和年龄,看起来像这样(它比这个例子大得多)
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中有没有办法做到这一点?
我已经看到了这个问题如何总结数据帧的对角线,但他只想要总和,我想要迭代总和.
谢谢.
使用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)