如何在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
广告