如何找到 R 数据框中每行的累计和?

r programmingserver side programmingprogramming更新于 2025/4/7 21:52:17

要找到 R 数据框中每行的累计和,我们需要将数据框读取为 data.table 对象,然后使用 Reduce 函数和累积参数。

例如,如果我们有一个名为 df 的数据框,并且我们想要找到 df 中每行的累计和,那么我们可以使用下面提到的命令 −

setDT(df)[,names(df):=Reduce("+",df,accumulate=TRUE)]

示例 1

以下代码片段创建了一个示例数据框−

x1<-sample(1:50,20)
x2<-sample(1:50,20)
x3<-sample(1:50,20)
df1<-data.frame(x1,x2,x3)
df1

创建以下数据框

  x1  x2 x3
 1 6  19 3
 2 28 46 5
 3 17 3  16
 4 16 44 25
 5 50 26 14
 6 40 16 11
 7 21 8  48
 8 19 9  27
 9 37 43 1
10 34 33 15
11 4  17 50
12 48 25 44
13 31 18 12
14 7  13 9
15 12 6  8
16 22 2  4
17 23 23 41
18 11 37 19
19 49 7  13
20 3  4  49

要加载 data.table 包并在上面创建的数据框中找到 df1 中每行的累积值,请将以下代码添加到上面的代码片段中 −

x1<-sample(1:50,20)
x2<-sample(1:50,20)
x3<-sample(1:50,20)
df1<-data.frame(x1,x2,x3)
library(data.table)
setDT(df1)[,names(df1):=Reduce("+",df1,accumulate=TRUE)]
df1

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

   x1  x2 x3
 1: 6  25 28
 2: 28 74 79
 3: 17 20 36
 4: 16 60 85
 5: 50 76 90
 6: 40 56 67
 7: 21 29 77
 8: 19 28 55
 9: 37 80 81
10: 34 67 82
11: 4  21 71
12: 48 73 117
13: 31 49 61
14: 7  20 29
15: 12 18 26
16: 22 24 28
17: 23 46 87
18: 11 48 67
19: 49 56 69
20: 3  7  56

示例 2

以下代码片段创建了一个示例数据框 −

y1<-round(rnorm(20),0)
y2<-round(rnorm(20),0)
y3<-round(rnorm(20),0)
df2<-data.frame(y1,y2,y3)
df2

创建以下数据框

  y1  y2 y3
 1  0  1  1
 2 -1 -1  1
 3  1 -1 -1
 4  0  0  0
 5 -1  0  0
 6  0 -2  0
 7 -1  0  0
 8  1  0 -1
 9  0  0  2
10  1  0  0
11 -1  0 -1
12 -1  0 -1
13  1  0  1
14  0 -2  0
15 -1  0  0
16 -1  1 -1
17 -1 -1 -1
18  0  0 -1
19  0 -1  1
20  0 -1 -1

要查找上面创建的数据框中 df2 中每行的累积值,请将以下代码添加到上面的代码片段中−

y1<-round(rnorm(20),0)
y2<-round(rnorm(20),0)
y3<-round(rnorm(20),0)
df2<-data.frame(y1,y2,y3)
setDT(df2)[,names(df2):=Reduce("+",df2,accumulate=TRUE)]
df2

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

    y1 y2 y3
 1:  0  1  2
 2: -1 -2 -1
 3:  1  0 -1
 4:  0  0  0
 5: -1 -1 -1
 6:  0 -2 -2
 7: -1 -1 -1
 8:  1  1  0
 9:  0  0  2
10:  1  1  1
11: -1 -1 -2
12: -1 -1 -2
13:  1  1  2
14:  0 -2 -2
15: -1 -1 -1
16: -1  0 -1
17: -1 -2 -3
18:  0  0 -1
19:  0 -1  0
20:  0 -1 -2

相关文章