如果 R 資料框中存在缺失值,則按組對 R 資料框列進行彙總。


如果 R 資料框中存在缺失值,可以使用 dplyr 包的 summarise_each 函式找到列值的總和,其中我們可以透過將 na.rm 引數設定為 TRUE 來刪除缺失值。

由於資料框中將存在分組,因此同一個包的 group_by 函式將幫助 summarise_each 函式按組執行求和。檢視下面的示例以瞭解其工作原理。

示例 1

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

Grp<-sample(c("I","II","III"),20,replace=TRUE)
Rate<-sample(c(NA,2,4),20,replace=TRUE)
df1<-data.frame(Grp,Rate)
df1

建立了以下資料框

   Grp Rate
1   II   2
2    I   4
3   II  NA
4   II   4
5   II   2
6    I  NA
7  III   2
8  III   4
9    I  NA
10   I  4
11 III  4
12  II  4
13  II NA
14   I  4
15 III  4
16 III  4
17 III  2
18  II NA
19 III  2
20 III  2

要載入 dplyr 包並在 df1 中彙總列以找到總和(忽略上述建立的資料框中缺失的值),請將以下程式碼新增到上述程式碼片段中 -

Grp<-sample(c("I","II","III"),20,replace=TRUE)
Rate<-sample(c(NA,2,4),20,replace=TRUE)
df1<-data.frame(Grp,Rate)
library(dplyr)
df1%%group_by(Grp)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

輸出

如果將所有上述程式碼片段作為一個程式執行,則會生成以下輸出 -

 Grp Rate
 <chr <dbl
1   I 12
2  II 12
3 III 24

示例 2

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

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(c(NA,1.25,2.75),20,replace=TRUE)
df2<-data.frame(Class,Price)
df2

建立了以下資料框

  Class Price
1 Third  1.25
2 First    NA
3 Third  1.25
4 Third  2.75
5 Second   NA
6 Second 1.25
7 Second 1.25
8 Third    NA
9 First  2.75
10 Second  NA
11 Second  NA
12 Second  NA
13 Third   NA
14 Third   NA
15 Third   NA
16 Third 2.75
17 First 2.75
18 Third   NA
19 Third 1.25
20 Third   NA

要彙總 df2 中的列以找到總和(忽略上述建立的資料框中缺失的值),請將以下程式碼新增到上述程式碼片段中 -

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Price<-sample(c(NA,1.25,2.75),20,replace=TRUE)
df2<-data.frame(Class,Price)
df2%%group_by(Class)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

輸出

如果將所有上述程式碼片段作為一個程式執行,則會生成以下輸出 -

 Class Price
  <chr <dbl
1 First   5.5
2 Second  2.5
3 Third  9.25

示例 3

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

Category<-sample(c("Small","Medium","Large"),20,replace=TRUE)
Quantity<-sample(c(NA,500,1000),20,replace=TRUE)
df3<-data.frame(Category,Quantity)
df3

建立了以下資料框

 Category Quantity
1 Large   1000
2 Small   1000
3 Small    500
4 Large    500
5 Small   1000
6 Medium    NA
7 Small    500
8 Medium   500
9 Large     NA
10 Medium  500
11 Medium   NA
12 Large    NA
13 Small   500
14 Medium 1000
15 Large    NA
16 Medium  500
17 Small   500
18 Medium   NA
19 Small    NA
20 Medium 1000

要彙總 df3 中的列以找到總和(忽略上述建立的資料框中缺失的值),請將以下程式碼新增到上述程式碼片段中 -

Category<-sample(c("Small","Medium","Large"),20,replace=TRUE)
Quantity<-sample(c(NA,500,1000),20,replace=TRUE)
df3<-data.frame(Category,Quantity)
df3%%group_by(Category)%%summarise_each(funs(sum(.,na.rm=TRUE)))
# A tibble: 3 x 2

輸出

如果將所有上述程式碼片段作為一個程式執行,則會生成以下輸出 -

 Category Quantity
 <chr <dbl
1 Large  1500
2 Medium 3500
3 Small  4000

更新於: 2021年11月2日

429 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.