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


为了查找R数据框中每个分组的非缺失值个数,我们可以将数据框转换为data.table对象,然后使用sum函数结合is.na的否定。

例如,如果我们有一个名为df的数据框,其中包含一个分组列(例如Group)和一个包含一些NA值的数值列(例如Num),那么我们可以使用以下命令查找每个Group中非缺失值的个数:

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的非缺失值个数,请将以下代码添加到上述代码片段中:

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

更新于:2021年11月8日

201 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告