sort()如何在R中的data.frame中工作

时间:2014-02-28 02:47:56

标签: r sorting dataframe

sort如何工作,即使用什么方法对

中的列进行排序
data.frame (barley$site, barley$year, barley$variety)

如下

library(lattice)
barley <- barley[order(barley$site, barley$year, barley$variety), ] 

2 个答案:

答案 0 :(得分:3)

你可能想要:

barley[order(as.character(barley$site), as.numeric(barley$year), as.character(barley$variety)),] 

正如您所拥有的那样,您按照data.frame的基础级别进行排序,这导致了非常奇怪的东西。查看数据框的结构:

 'data.frame':  120 obs. of  4 variables:
 $ yield  : num  27 48.9 27.4 39.9 33 ...
 $ variety: Factor w/ 10 levels "Svansota","No. 462",..: 3 3 3 3 3 3 7 7 7 7 ...
 $ year   : Factor w/ 2 levels "1932","1931": 2 2 2 2 2 2 2 2 2 2 ...
 $ site   : Factor w/ 6 levels "Grand Rapids",..: 3 6 4 5 1 2 3 6 4 5 ...

请注意year的级别与您期望的顺序相反。 order的文档非常简单地讨论了这个问题:

  

对于因素,这会对内部代码进行排序,这对于有序因子特别合适。

我个人认为这非常令人困惑,但事实就是如此。因素在大多数情况下非常有用,但如果你不小心,那么其他因素就非常危险。将数字表示为因子(如year所示)特别糟糕。

有关详细信息,请参阅?factor

答案 1 :(得分:0)

默认情况下,sort不知道如何对数据框执行任何操作。您可以使用df$x <- sort(df$x)之类的内容对数据框中的各个列进行排序,但您几乎肯定不希望这样做;它会弄乱你的数据。

您可以使用order对数据框中的行进行排序,就像您在那里的示例代码一样。这会按site列中的值对行进行排序,与year断开,然后与variety断开。