按因子顺序排序数据框列需要重新排序

时间:2014-09-08 18:33:13

标签: r sorting dataframe

我需要根据数据框的两列制作一个条形图。对于正确的顺序,我需要重新排序一列的因子,并用它重新排序数据帧的其余部分。我试图重新排序因子,但其余列保持不变。如何对整个数据框进行排序?我将展示我对虹膜数据做了些什么(请注意,我的数据实际上有两个标称列)

> d<-iris
> head(d)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> d$Species<-factor(d$Species, labels=c("virginica","setosa","versicolor"))
> head(d)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          5.1         3.5          1.4         0.2 virginica
2          4.9         3.0          1.4         0.2 virginica
3          4.7         3.2          1.3         0.2 virginica
4          4.6         3.1          1.5         0.2 virginica
5          5.0         3.6          1.4         0.2 virginica
6          5.4         3.9          1.7         0.4 virginica
> 

正如您所见,Species列按我的意愿排序,但其余列仍然存在。我该怎么办?

修改

我尝试了答案,并意识到,我没有充分说明我的问题: 当我求助数据帧时,我需要重新排列物种列因子的顺序。 除了重新排序的数据框之外,我正在寻找这个结果,因此在绘图时将使用此顺序:

head(d1$Species)
[1] virginica virginica virginica virginica virginica virginica
Levels: virginica setosa versicolor

直到现在,订单仍然不是我想要的: ` enter image description here

2 个答案:

答案 0 :(得分:3)

 d1 <- d[order(factor(d$Species, levels=c("virginica","setosa","versicolor"))),]
 head(d1)
 #   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
 #101          6.3         3.3          6.0         2.5 virginica
 #102          5.8         2.7          5.1         1.9 virginica
 #103          7.1         3.0          5.9         2.1 virginica
 #104          6.3         2.9          5.6         1.8 virginica
 #105          6.5         3.0          5.8         2.2 virginica
 #106          7.6         3.0          6.6         2.1 virginica

更新

要更改因素levels的{​​{1}},您必须:

Species

答案 1 :(得分:0)

require(plyr)
d <- iris
arrange(d, factor(d$Species, levels = c("virginica","setosa","versicolor")))