在 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
广告