如果全部为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(this output will vary on your system due to randomization)-

   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 来查找行最小值

使用带有 if else 函数的 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 来查找行最小值

使用带有 if else 函数的 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

猜你喜欢