如何在 R 数据框中排序数值型因子列?


要对 R 数据框中的数值型因子列进行排序,我们需要使用 as.character 函数将该列转换为字符型,然后使用 as.numeric 函数转换为数值型,最后使用 order 函数进行排序。

例如,如果我们有一个名为 df 的数据框,其中包含一个名为 F 的数值型因子列,则可以使用以下命令对 F 进行排序:

df[order(as.numeric(as.character(df$F))),]

示例 1

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

Class<-factor(sample(1:4,20,replace=TRUE))
Sales<-sample(1:50,20)
df1<-data.frame(Class,Sales)
df1

创建了以下数据框

  Class Sales
 1 1    4
 2 2   13
 3 3    2
 4 2   39
 5 2   23
 6 3   37
 7 4   33
 8 3   16
 9 4   17
10 2   20
11 3   50
12 1   27
13 4    6
14 4   19
15 4   48
16 3   43
17 4   31
18 3   35
19 2   14
20 4   45

要在上面创建的数据框中对 df1 的 Class 列进行排序,请将以下代码添加到上述代码片段中:

Class<-factor(sample(1:4,20,replace=TRUE))
Sales<-sample(1:50,20)
df1<-data.frame(Class,Sales)
df1[order(as.numeric(as.character(df1$Class))),]

输出

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

  Class Sales
 1 1     4
12 1    27
 2 2    13
 4 2    39
 5 2    23
10 2    20
19 2    14
 3 3     2
 6 3    37
 8 3    16
11 3    50
16 3    43
18 3    35
 7 4    33
 9 4    17
13 4     6
14 4    19
15 4    48
17 4    31
20 4    45

示例 2

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

Group<-factor(sample(1:3,20,replace=TRUE))
Demand<-sample(500:1000,20)
df2<-data.frame(Group,Demand)
df2

创建了以下数据框

  Group Demand
 1 1    625
 2 3    855
 3 3    809
 4 2    951
 5 2    939
 6 2    629
 7 2    902
 8 1    903
 9 3    633
10 1    886
11 1    962
12 2    577
13 1    660
14 3    709
15 1    584
16 3    889
17 1    762
18 3    594
19 2    779
20 2    859

要在上面创建的数据框中对 df2 的 Group 列进行排序,请将以下代码添加到上述代码片段中:

Group<-factor(sample(1:3,20,replace=TRUE))
Demand<-sample(500:1000,20)
df2<-data.frame(Group,Demand)
df2[order(as.numeric(as.character(df2$Group))),]

输出

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

  Group Demand
 1 1    625
 8 1    903
10 1    886
11 1    962
13 1    660
15 1    584
17 1    762
 4 2    951
 5 2    939
 6 2    629
 7 2    902
12 2    577
19 2    779
20 2    859
 2 3    855
 3 3    809
 9 3    633
14 3    709
16 3    889
18 3    594

更新于: 2021年11月10日

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告