在 R 資料框中按組查詢每列中非缺失值的個數。


要查詢 R 資料框中按組對每列中非缺失值的個數,我們可以使用 dplyr 包的 summarise_each 函式以及 is.na 函式的否定形式。

例如,如果我們有一個名為 df 的資料框,其中包含一個分組列,例如 G,以及一些其他包含一些 NA 的列,那麼我們可以使用以下命令在分組列 G 中查詢每列中非缺失值的個數:

df%%group_by(G)%%summarise_each(funs(sum(!is.na(.))))

示例 1

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

Group<-sample(LETTERS[1:4],20,replace=TRUE)
x1<-sample(c(NA,1,2),20,replace=TRUE)
x2<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
df1<-data.frame(Group,x1,x2)
df1

建立了以下資料框

Group x1   x2
1  C   2 -0.49
2  B   1  1.86
3  A  NA    NA
4  A  NA    NA
5  D   1  1.12
6  A  NA  1.12
7  B   1  1.86
8  C   1 -0.49
9  D   2    NA
10 A  NA  1.12
11 A  NA  1.12
12 C  NA  1.86
13 A   2 -0.49
14 A   1 -0.49
15 C  NA    NA
16 C  NA  1.86
17 A  NA  1.12
18 D   2 -0.49
19 C   2  1.86
20 C   2    NA

要載入 dplyr 包並在上面建立的資料框 df1 中按 Group 列查詢每列中非缺失值的個數,請將以下程式碼新增到上述程式碼片段中:

Group<-sample(LETTERS[1:4],20,replace=TRUE)
x1<-sample(c(NA,1,2),20,replace=TRUE)
x2<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
df1<-data.frame(Group,x1,x2)
library(dplyr)
df1%%group_by(Group)%%summarise_each(funs(sum(!is.na(.))))
# A tibble: 4 x 3

輸出

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

Group x1 x2
 <chr <int <int
1  A   2   6
2  B   2   2
3  C   4   5
4  D   3   2

示例 2

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

Class<-sample(c("I","II","III"),20,replace=TRUE)
Score<-sample(c(NA,1:5),20,replace=TRUE)
Rank<-sample(c(NA,0:2),20,replace=TRUE)
df2<-data.frame(Class,Score,Rank)
df2

建立了以下資料框

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

要查詢上面建立的資料框 df2 中按 Class 列查詢每列中非缺失值的個數,請將以下程式碼新增到上述程式碼片段中:

Class<-sample(c("I","II","III"),20,replace=TRUE)
Score<-sample(c(NA,1:5),20,replace=TRUE)
Rank<-sample(c(NA,0:2),20,replace=TRUE)
df2<-data.frame(Class,Score,Rank)
df2%%group_by(Class)%%summarise_each(funs(sum(!is.na(.))))
# A tibble: 3 x 3

輸出

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

 Class Score Rank
<chr <int  <int
1 I    6     5
2 II   8     4
3 III  2     3

更新於: 2021-11-03

790 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.