如何在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+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.