[英]How does sort() work in data.frame within R
sort
工作方式,即使用哪種方法對列進行排序
data.frame (barley$site, barley$year, barley$variety)
如下
library(lattice)
barley <- barley[order(barley$site, barley$year, barley$variety), ]
您可能想要:
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
。
默認情況下, sort
不知道如何對數據框執行任何操作。 您可以使用df$x <- sort(df$x)
之類的方式對數據框中的各個列進行df$x <- sort(df$x)
但是幾乎可以肯定,您不會這樣做。 它只會弄亂您的數據。
您可以通過使用order
來對數據框中的行進行order
就像那里的示例代碼一樣。 這將按列site
的值對行進行排序,先中斷與year
聯系,然后再更改其variety
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.