在 R 数据帧的每一行中查找非 NA 值的频率。
要查找R数据帧每一行中非NA值的频率,我们可以使用apply函数和na.omit函数。
例如,如果我们有一个名为df的数据框,其中包含一些NA值,那么我们可以使用如下命令在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