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

r programmingserver side programmingprogramming更新于 2025/4/8 23:07:17

要查找 R 数据框中每组中非缺失值的数量,我们可以将数据框转换为 data.table 对象,然后使用 sum 函数对 is.na 取反。

例如,如果我们有一个名为 df 的数据框,其中包含一个分组列 Group 和一个包含少量 NA 的数值列 Num,那么我们可以使用下面给出的命令查找每个组中非缺失值的数量。 −

setDT(df)[,sum(!is.na(df)),by=.(Group)]

示例 1

以下代码片段创建了一个示例数据框 −

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

创建以下数据框

  Grp Dep_Var
 1 B    NA
 2 A  1.00
 3 A  20.00
 4 B -0.63
 5 B -1.48
 6 B    NA
 7 A  1.00
 8 C  20.00
 9 A -0.63
10 A -1.48
11 C    NA
12 C  1.00
13 B  20.00
14 C -0.63
15 B -1.48
16 A    NA
17 C  1.00
18 B  20.00
19 A -0.63
20 B -1.48

要加载 data.table 对象并查找上面创建的数据框中每个 Grp 中非缺失值的数量,请将以下代码添加到上面的代码片段中 −

Grp<-sample(LETTERS[1:3],20,replace=TRUE)
Dep_Var<-sample(c(NA,round(rnorm(2),2),20,replace=TRUE))
df1<-data.frame(Grp,Dep_Var)
library(data.table)
setDT(df1)[,sum(!is.na(Dep_Var)),by=.(Grp)]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

  Grp V1
1: B 6
2: A 6
3: C 4

示例 2

以下代码片段创建了一个示例数据框 −

Category<-sample(c("Low","Medium","High"),20,replace=TRUE)
Val<-sample(c(NA,rpois(2,5),20,replace=TRUE))
df2<-data.frame(Category,Val)
df2

创建以下数据框

  Category Val
 1 Medium  20
 2 High     1
 3 High     8
 4 High     5
 5 High    NA
 6 Medium  20
 7 High     1
 8 Low      8
 9 Low      5
10 Medium  NA
11 Medium  20
12 Medium   1
13 Medium   8
14 Medium   5
15 Medium  NA
16 High    20
17 Medium   1
18 Medium   8
19 Low      5
20 Low     NA

要查找上面创建的数据框中每个类别中非缺失值的数量,请将以下代码添加到上面的代码片段中 −

Category<-sample(c("Low","Medium","High"),20,replace=TRUE)
Val<-sample(c(NA,rpois(2,5),20,replace=TRUE))
df2<-data.frame(Category,Val)
setDT(df2)[,sum(!is.na(Val)),by=.(Category)]

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

 Category V1
1: Medium 8
2: High   5
3: Low    3

相关文章