如何在R中根據兩組求值的和,即使存在缺失值?


如果存在缺失值,我們可以使用dplyr包的`group_by`和`summarise`函式來根據兩組求值的和。

例如,如果我們有一個名為df的資料框,其中包含一個數值列(例如Num)和兩個分組列(例如Grp1和Grp2),那麼如果df中存在缺失值,則可以透過使用以下命令來找到基於Grp1和Grp2的Num中值的和:

df%>%group_by(Grp1,Grp2)%>%summarise(Sum=sum(Num,na.rm=TRUE))

示例1

以下程式碼片段建立一個示例資料框:

grp1<-sample(LETTERS[1:3],20,replace=TRUE)
grp2<-sample(letters[1:3],20,replace=TRUE)
Dep_Var<-sample(c(NA,rpois(2,5)),20,replace=TRUE)
df1<-data.frame(grp1,grp2,Dep_Var)
df1

輸出

建立以下資料框:

   grp1 grp2 Dep_Var
1   A    a    4
2   A    c   NA
3   C    a    5
4   A    c   NA
5   A    b   NA
6   A    a    4
7   C    c    5
8   B    b    4
9   C    a   NA
10  A    c    5
11  B    a   NA
12  B    c    5
13  A    c   NA
14  C    c    4
15  C    c    5
16  A    a   NA
17  C    b    4
18  A    a    4
19  B    a    4
20  B    a   NA

要載入dplyr包並根據grp1和grp2查詢Dep_Var中值的和,請將以下程式碼新增到上面的程式碼片段中:

library(dplyr)
df1%>%group_by(grp1,grp2)%>%summarise(Sum=sum(Dep_Var,na.rm=TRUE))
`summarise()` regrouping Output by 'grp1' (override with `.groups` argument)
# A tibble: 9 x 3
# Groups: grp1 [3]

輸出

如果您將以上所有程式碼片段作為一個程式執行,它將生成以下輸出:

grp1 grp2 Sum
 <chr> <chr> <int>
1  A   a    12
2  A   b     0
3  A   c     5
4  B   a     4
5  B   b     4
6  B   c     5
7  C   a     5
8  C   b     4
9  C   c    14

示例2

以下程式碼片段建立一個示例資料框:

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Rank<-sample(1:4,20,replace=TRUE)
Score<-sample(1:100,20)
df2<-data.frame(Class,Rank,Score)
df2

輸出

建立以下資料框:

  Class   Rank Score
1  Second  4   100
2  First   4    76
3  First   2    54
4  Third   3    66
5  Third   2    98
6  Second  1    81
7  First   3    95
8  Second  1     7
9  Third   3    94
10 Second  1    78
11 Third   3    13
12 Third   2    19
13 Second  4    30
14 First   4    31
15 Second  3    87
16 First   3    38
17 First   1    60
18 First   3    36
19 Second  4     3
20 Third   3    84

要根據班級和排名查詢Score中值的和,請將以下程式碼新增到上面的程式碼片段中:

df2%>%group_by(Class,Rank)%>%summarise(Sum=sum(Score,na.rm=TRUE))
`summarise()` regrouping

Output

by 'Class' (override with `.groups` argument) # A tibble: 9 x 3 # Groups: Class [3]

輸出

如果您將以上所有程式碼片段作為一個程式執行,它將生成以下輸出:

  Class  Rank   Sum
  <chr>  <int> <int>
1  First   1   60
2  First   2   54
3  First   3  169
4  First   4  107
5  Second  1  166
6  Second  3   87
7  Second  4  133
8  Third   2  117
9  Third   3  257

更新於:2021年11月2日

283次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

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