在 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