如果全部为0,如何在R数据帧中找到不包括零的最小行返回0?
要查找R数据帧中不包括零的最小行,如果全为0,则返回0,我们可以按照以下步骤操作-
首先,创建一个数据框。
然后,通过使用if函数和apply函数排除零来查找行最小值。
示例1
创建数据框
让我们创建一个数据框,如下所示-
x1<-sample(c(0,1,5),20,replace=TRUE) x2<-sample(c(0,10,20),20,replace=TRUE) x3<-sample(c(0,5,10),20,replace=TRUE) df1<-data.frame(x1,x2,x3) df1
执行时,上述脚本生成以下内容output(thisoutputwillvaryonyoursystemduetorandomization)-
x1 x2 x3 1 0 10 0 2 0 0 0 3 1 10 0 4 5 20 0 5 5 20 10 6 1 10 5 7 0 10 10 8 5 0 10 9 0 20 0 10 1 20 10 11 1 10 5 12 5 0 5 13 0 0 0 14 0 0 5 15 5 20 0 16 5 20 0 17 5 20 10 18 5 10 10 19 0 20 5 20 1 10 10
如果全部为0,则通过排除零返回0来查找行最小值
使用带有ifelse函数的apply函数通过排除零返回0如果全部为0来查找行最小值-
x1<-sample(c(0,1,5),20,replace=TRUE) x2<-sample(c(0,10,20),20,replace=TRUE) x3<-sample(c(0,5,10),20,replace=TRUE) df1<-data.frame(x1,x2,x3) apply(df1,1,function(x) if(all(x==0)) 0 else min(x[x>0]))
输出
[1] 10 0 1 5 5 1 10 5 20 1 1 5 0 5 5 5 5 5 5 1
示例2
创建数据框
让我们创建一个数据框,如下所示-
y1<-sample(c(0,50),20,replace=TRUE) y2<-sample(c(0,75),20,replace=TRUE) y3<-sample(c(0,90),20,replace=TRUE) df2<-data.frame(y1,y2,y3) df2
y1 y2 y3 1 50 75 90 2 0 5 0 3 0 75 0 4 50 0 90 5 50 0 90 6 0 0 0 7 0 75 90 8 50 75 0 9 0 75 90 10 50 0 0 11 0 0 0 12 50 0 0 13 0 0 0 14 0 0 90 15 50 75 90 16 50 75 0 17 50 75 90 18 50 75 0 19 0 75 90 20 50 0 90
如果全部为0,则通过排除零返回0来查找行最小值
使用带有ifelse函数的apply函数通过排除零返回0如果全部为0来查找行最小值-
y1<-sample(c(0,50),20,replace=TRUE) y2<-sample(c(0,75),20,replace=TRUE) y3<-sample(c(0,90),20,replace=TRUE) df2<-data.frame(y1,y2,y3) apply(df2,1,function(x) if(all(x==0)) 0 else min(x[x>0]))
输出
[1] 50 75 75 50 50 0 75 50 75 50 0 50 0 90 50 50 50 50 75 50