如何在 R 数据框中基于几个列找到每一行的最小值?


为了在 R 数据框中基于几个列找到每一行的最小值,我们可以在 with 函数内部使用 pmin 函数。

例如,如果我们有一个名为 df 的数据框,其中包含五列,例如 x、y、z、a 和 b,那么基于列 x、y 和 b 的每一行的最小值可以通过使用下面给出的命令来找到:

with(df,pmin(x,y,b))

示例 1

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

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
x4<-rnorm(20)
df1<-data.frame(x1,x2,x3,x4)
df1

创建了以下数据框:

      x1            x2          x3           x4
1  -0.11773107  -0.82035732  -0.28450601  -1.10704509
2  -1.01962604  -2.60294139   0.45711797   0.43207151
3   1.13500837  -1.14440016  -0.26626228  -0.73794240
4  -0.80790790  -1.14806291   0.35394025  -0.12112739
5  -0.06178105  -0.57400680  -0.66666658   1.09352761
6  -0.27553943  -1.36698799  -0.31081777   0.04752593
7   0.10584138  -1.34775886   0.17752275   0.38897313
8  -0.12614587  -0.03826633   0.70551865  -1.15621529
9   1.30759989  -0.23571489   0.38343949  -0.33398701
10  0.80694222   1.01968698   0.97463771  -0.47795594
11 -1.18169096  -0.03684450  -0.59514439  -1.21205644
12  0.43798192  -0.45043310  -0.42103633  -0.81786582
13  0.08569171  -0.21929358  -0.29929403   0.48033841
14  1.03432091  -0.66014884   0.40906268  -2.26329167
15 -1.90251190  -1.19862628   0.41706688  -0.44017107
16 -0.35222400   0.37808439  -0.68560797   0.36525694
17 -1.38445655   1.73951876   1.24614256  -2.23414164
18 -1.33440782   0.50000865   0.85680768   0.13643720
19 -1.29441749  -0.18851102  -0.69235928  -0.13695773
20  0.05258651  -0.10824434  -0.06976701   0.13541223

要查找列 x2、x3 和 x4 的每一行的最小值,请将以下代码添加到上述代码片段中:

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
x4<-rnorm(20)
df1<-data.frame(x1,x2,x3,x4)
df1$Min_LastThree<-with(df1,pmin(x2,x3,x4))
df1

输出

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

        x1           x2         x3          x4         Min_LastThree
1  -0.11773107  -0.82035732  -0.28450601  -1.10704509  -1.1070451
2  -1.01962604  -2.60294139   0.45711797   0.43207151  -2.6029414
3   1.13500837  -1.14440016  -0.26626228  -0.73794240  -1.1444002
4  -0.80790790  -1.14806291   0.35394025  -0.12112739  -1.1480629
5  -0.06178105  -0.57400680  -0.66666658   1.09352761  -0.6666666
6  -0.27553943  -1.36698799  -0.31081777   0.04752593  -1.3669880
7   0.10584138  -1.34775886   0.17752275   0.38897313  -1.3477589
8  -0.12614587  -0.03826633   0.70551865  -1.15621529  -1.1562153
9   1.30759989  -0.23571489   0.38343949  -0.33398701  -0.3339870
10  0.80694222   1.01968698   0.97463771  -0.47795594  -0.4779559
11 -1.18169096  -0.03684450  -0.59514439  -1.21205644  -1.2120564
12  0.43798192  -0.45043310  -0.42103633  -0.81786582  -0.8178658
13  0.08569171  -0.21929358  -0.29929403   0.48033841  -0.2992940
14  1.03432091  -0.66014884   0.40906268  -2.26329167  -2.2632917
15 -1.90251190  -1.19862628   0.41706688  -0.44017107  -1.1986263
16 -0.35222400   0.37808439  -0.68560797   0.36525694  -0.6856080
17 -1.38445655   1.73951876   1.24614256  -2.23414164  -2.2341416
18 -1.33440782   0.50000865   0.85680768   0.13643720   0.1364372
19 -1.29441749  -0.18851102  -0.69235928  -0.13695773  -0.6923593
20  0.05258651  -0.10824434  -0.06976701   0.13541223  -0.1082443

示例 2

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

y1<-rpois(20,5)
y2<-rpois(20,1)
y3<-rpois(20,2)
y4<-rpois(20,3)
df2<-data.frame(y1,y2,y3,y4)
df2

输出

创建了以下数据框:

   y1 y2 y3 y4
1   1 0  0  1
2  11 1  2  7
3   5 0  5  2
4   3 1  4  4
5   6 0  2  7
6   6 0  3  3
7   2 0  2  5
8   4 0  0  5
9   6 0  1  1
10  4 1  3  3
11  6 0  4  4
12  5 0  2  2
13  7 0  1  1
14  4 3  0  3
15  5 2  4  2
16  4 0  4  2
17  4 0  1  2
18  6 1  2  2
19  8 2  2  4
20 11 0  2  2

要查找列 y2 和 y3 的每一行的最小值,请将以下代码添加到上述代码片段中:

y1<-rpois(20,5)
y2<-rpois(20,1)
y3<-rpois(20,2)
y4<-rpois(20,3)
df2<-data.frame(y1,y2,y3,y4)
df2$Min_MiddleTwo<-with(df2,pmin(y2,y3))
df2

输出

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

   y1 y2 y3 y4 Min_MiddleTwo
1   1 0  0  1  0
2  11 1  2  7  1
3   5 0  5  2  0
4   3 1  4  4  1
5   6 0  2  7  0
6   6 0  3  3  0
7   2 0  2  5  0
8   4 0  0  5  0
9   6 0  1  1  0
10  4 1  3  3  1
11  6 0  4  4  0
12  5 0  2  2  0
13  7 0  1  1  0
14  4 3  0  3  0
15  5 2  4  2  2
16  4 0  4  2  0
17  4 0  1  2  0
18  6 1  2  2  1
19  8 2  2  4  2
20 11 0  2  2  0

更新于: 2021年11月3日

3K+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告