在 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告