查找R数据框中每一行的非NA值频率。


为了查找R数据框中每一行的非NA值频率,我们可以使用`apply`函数和`na.omit`函数。

例如,如果我们有一个包含一些NA值的数据框`df`,我们可以使用如下命令查找`df`每一行的非NA值频率:

apply(df,1, function(x) length(na.omit(x)))

示例1

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

x1<-sample(c(NA,2,5),20,replace=TRUE)
x2<-sample(c(NA,10,15),20,replace=TRUE)
x3<-sample(c(NA,1,3),20,replace=TRUE)
df1<-data.frame(x1,x2,x3)
df1

创建了以下数据框

  x1  x2 x3
1  5  10  3
2  2  10  1
3  2  10 NA
4  2  15  3
5  NA 10  1
6  5  NA NA
7  5  15 NA
8  NA 15  3
9  2  NA NA
10 2  10 NA
11 NA 15 NA
12 5  15  3
13 5  10  3
14 5  NA  3
15 2  NA  1
16 NA 15 NA
17 NA 15 NA
18 2  NA  3
19 2  15  3
20 2  10 NA

为了在上面创建的数据框`df1`中查找每一行的非NA值频率,请将以下代码添加到上面的代码片段:

x1<-sample(c(NA,2,5),20,replace=TRUE)
x2<-sample(c(NA,10,15),20,replace=TRUE)
x3<-sample(c(NA,1,3),20,replace=TRUE)
df1<-data.frame(x1,x2,x3)
apply(df1,1, function(x) length(na.omit(x)))

输出

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

[1] 3 3 2 3 2 1 2 2 1 2 1 3 3 2 2 1 1 2 3 2

示例2

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

y1<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
y2<-sample(c(NA,round(rnorm(3,10,2),2)),20,replace=TRUE)
y3<-sample(c(NA,round(rnorm(3,25,3.2),2)),20,replace=TRUE)
df2<-data.frame(y1,y2,y3)
df2

创建了以下数据框

      y1    y2    y3
1   0.27    NA 24.02
2   0.27  9.30 24.02
3   0.49    NA    NA
4     NA  8.10 25.60
5   0.49 11.11 29.34
6  -0.16    NA 25.60
7   0.49  9.30 29.34
8  -0.16  8.10 25.60
9  -0.16 11.11 24.02
10  0.49  8.10 29.34
11    NA 11.11 25.60
12  0.27  9.30 29.34
13 -0.16    NA    NA
14  0.27  8.10 25.60
15    NA  8.10 29.34
16  0.27    NA    NA
17 -0.16  9.30 24.02
18    NA  9.30    NA
19  0.49 11.11 25.60
20  0.49    NA 25.60

为了在上面创建的数据框`df2`中查找每一行的非NA值频率,请将以下代码添加到上面的代码片段:

y1<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
y2<-sample(c(NA,round(rnorm(3,10,2),2)),20,replace=TRUE)
y3<-sample(c(NA,round(rnorm(3,25,3.2),2)),20,replace=TRUE)
df2<-data.frame(y1,y2,y3)
apply(df2,1, function(x) length(na.omit(x)))

输出

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

[1] 2 3 1 2 3 2 3 3 3 3 2 3 1 3 2 1 3 1 3 2

示例3

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

z1<-sample(c(NA,runif(2,1,5)),20,replace=TRUE)
z2<-sample(c(NA,runif(2,5,10)),20,replace=TRUE)
z3<-sample(c(NA,runif(3,1,2)),20,replace=TRUE)
df3<-data.frame(z1,z2,z3)
df3

创建了以下数据框

         z1       z2       z3
1  2.237191       NA 1.242077
2  1.137563 8.614818 1.120255
3        NA 9.840686       NA
4  2.237191 9.840686 1.242077
5  1.137563       NA       NA
6        NA 9.840686       NA
7  1.137563       NA 1.242077
8  2.237191 9.840686 1.877137
9  1.137563 8.614818 1.120255
10 2.237191 9.840686       NA
11 1.137563 8.614818 1.877137
12       NA 8.614818 1.877137
13       NA       NA 1.877137
14 1.137563 8.614818       NA
15       NA 9.840686 1.242077
16 1.137563 9.840686 1.877137
17 2.237191 9.840686       NA
18 1.137563 8.614818 1.242077
19       NA 8.614818 1.120255
20 2.237191       NA 1.242077

为了在上面创建的数据框`df2`中查找每一行的非NA值频率,请将以下代码添加到上面的代码片段:

z1<-sample(c(NA,runif(2,1,5)),20,replace=TRUE)
z2<-sample(c(NA,runif(2,5,10)),20,replace=TRUE)
z3<-sample(c(NA,runif(3,1,2)),20,replace=TRUE)
df3<-data.frame(z1,z2,z3)
apply(df3,1, function(x) length(na.omit(x)))

输出

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

[1] 2 3 1 3 1 1 2 3 3 2 3 2 1 2 2 3 2 3 2 2

更新于:2021年11月3日

211 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告