如何在R中查找另一列值之前某列值的总和?


为了找到另一列特定值之前某列值的总和,我们可以使用cumsum函数和sum函数。

例如,如果我们有一个名为df的数据框,其中包含两列,例如x和y,并且我们想要找到y等于2之前x值的总和,那么我们可以使用以下命令:

sum(df$x[cumsum(df$y==2)==0])

示例1

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

x1<-rpois(20,5)
x2<-rpois(20,2)
df1<-data.frame(x1,x2)
df1

输出

创建了以下数据框:

   x1 x2
1  9  4
2  1  2
3  5  3
4  5  2
5  4  2
6 14  2
7 11  3
8  2  2
9  6  1
10 6  2
11 1  2
12 3  3
13 3  0
14 6  2
15 6  0
16 9  3
17 5  1
18 6  4
19 5  2
20 2  2

为了找到x2达到0之前x1的总和,请将以下代码添加到上面的代码片段中:

x1<-rpois(20,5)
x2<-rpois(20,2)
df1<-data.frame(x1,x2)
sum(df1$x1[cumsum(df1$x2==0)==0])

输出

如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:

[1] 67

示例2

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

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

输出

创建了以下数据框:

    y1    y2
1   2.4  -0.7
2   0.1   2.7
3  -0.7   0.0
4   1.6  -1.9
5   0.2  -1.0
6   0.2   1.7
7   0.7   0.7
8  -0.1  -0.3
9  -0.2  -0.2
10 -1.3   1.4
11 -2.5  -0.4
12  1.2   0.9
13  0.8  -0.4
14  0.8  -1.3
15  0.6   0.5
16 -0.8  -1.8
17  0.4  -0.4
18  0.4   0.6
19 -1.0   0.2
20  0.3   0.6

为了找到y2达到0.5之前y1的总和,请将以下代码添加到上面的代码片段中:

y1<-round(rnorm(20),1)
y2<-round(rnorm(20),1)
df2<-data.frame(y1,y2)
sum(df2$y1[cumsum(df2$y2==0.5)==0])

输出

如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:

[1] 3.2

更新于:2021年11月5日

2K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告