如果 R 数据框中的某些列属于分类,如何找到每个数值列的最大值的位置?

r programmingserver side programmingprogramming更新于 2025/4/8 13:52:17

如果 R 数据框中的某些列属于分类,要找到每个数值列的最大值的位置,我们可以按照以下步骤操作 −

  • 首先,创建一个数据框。

  • 然后,使用 plyr 包中的 numcolwise 函数查找每个数值列的最大值(如果某些列属于分类)。

示例 1

创建数据框

让我们创建一个如下所示的数据框 −

Level<-sample(c("low","medium","high"),25,replace=TRUE)
Group<-sample(c("first","second"),25,replace=TRUE)
DV1<-rpois(25,5)
DV2<-rpois(25,10)
df1<-data.frame(Level,Group,DV1,DV2)
df1

输出

执行时,上述脚本将生成以下输出(由于随机化,此输出将因您的系统而异) −

   Level  Group  DV1 DV2
1  low    first  8    7
2  low    first  6   11
3  high   first  2   14
4  medium second 3   11
5  low    second 4   10
6  medium second 7    7
7  high   second 4   15
8  low    second 3    8
9  high   second 5    6
10 medium second 3   13
11 medium second 1   13
12 low    first  3   10
13 high   first  6   10
14 high   first  5   14
15 medium first 10   11
16 low    first  6   7
17 medium second 7   10
18 high   second 5   11
19 medium second 4   11
20 low    first  5   13
21 medium first  2    9
22 medium first  6   12
23 low    second 5    8
24 low    second 6   10
25 low    second 2    6

如果某些列是分类的,则查找每列的最大值

如果数据框 df1 中的某些列是分类的,则使用 plyr 包中的 numcolwise 函数查找每个数值列的最大值 −

Level<-sample(c("low","medium","high"),25,replace=TRUE)
Group<-sample(c("first","second"),25,replace=TRUE)
DV1<-rpois(25,5)
DV2<-rpois(25,10)
df1<-data.frame(Level,Group,DV1,DV2)
library(plyr)
numcolwise(which.max)(df1)

输出

  DV1 DV2
1 24  15

示例 2

创建数据框

让我们创建一个数据框,如下所示 −

factor1<-sample(c("Super","Lower","Medium"),25,replace=TRUE)
factor2<-sample(c("I","II","III"),25,replace=TRUE)
v1<-rnorm(25)
v2<-rnorm(25)
df2<-data.frame(factor1,factor2,v1,v2)
df2

输出

执行时,上述脚本将生成以下输出(由于随机化,此输出将因您的系统而异) −

   factor1  factor2   v1           v2
1  Lower      II   -0.88708231   0.30097842
2  Super      I    -1.15358512  -0.50595244
3  Lower      II   -0.07962128  -0.74934137
4  Super      I    -1.48634012   0.19566058
5  Lower     III    1.14577383  -1.09185066
6  Super     II     0.88951251  -0.02418110
7  Lower     III    0.13711621  -1.02686656
8  Super      I     0.27011965   1.26320650
9  Medium    III    0.16775174  -1.92041942
10 Medium    III   -0.15766279   1.26627694
11 Medium     I   -1.23267080   -0.93831033
12 Medium    II    0.38065869   2.09701663
13 Medium     I   -1.45391083  -0.08486117
14 Lower     III   0.80940837  -1.06338634
15 Medium     II   0.20411080  -0.29534513
16 Lower     III   0.59453629   2.64966638
17 Medium     III  0.31227512   1.68916757
18 Lower      I    2.89731076   0.96783335
19 Super     III  -0.06000641   0.58903660
20 Lower     III   0.92520811  -1.03121594
21 Medium    III   1.85323653  -1.33632487
22 Medium     II   1.13713484  -1.27496569
23 Super      I    0.52744948   0.28164512
24 Lower      I    0.17266053   0.57324301
25 Lower     II    2.67321967  -1.80427360

如果某些列属于分类,则查找每列的最大值

如果数据框 df2 中的某些列属于分类,则使用 plyr 包中的 numcolwise 函数查找每个数值列的最大值−

factor1<-sample(c("Super","Lower","Medium"),25,replace=TRUE)
factor2<-sample(c("I","II","III"),25,replace=TRUE)
v1<-rnorm(25)
v2<-rnorm(25)
df2<-data.frame(factor1,factor2,v1,v2)
library(plyr)
numcolwise(which.max)(df2)

输出

  v1 v2
1 18 16

相关文章