sort
如何工作,即使用什么方法对
data.frame (barley$site, barley$year, barley$variety)
如下
library(lattice)
barley <- barley[order(barley$site, barley$year, barley$variety), ]
答案 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
断开。