在 R 数据框中按组查找每列中非缺失值的数量。\

r programmingserver side programmingprogramming更新于 2025/4/9 15:52:17

要按组查找 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

相关文章