當我提取R中數據框列的因子水平時,它們會自動排序(按字母順序排列)。我怎樣才能防止這一點?也就是說,我希望這些級別的順序與數據框中列出的順序相同。防止因子水平排序
data.frame(Names = c("Paul McCartney", "John Lennon")) -> my.data
levels(my.data$Names)
[1]「約翰·列儂」,「保羅·麥卡特尼」
當我提取R中數據框列的因子水平時,它們會自動排序(按字母順序排列)。我怎樣才能防止這一點?也就是說,我希望這些級別的順序與數據框中列出的順序相同。防止因子水平排序
data.frame(Names = c("Paul McCartney", "John Lennon")) -> my.data
levels(my.data$Names)
[1]「約翰·列儂」,「保羅·麥卡特尼」
重新分配的因素,你讀取數據後:
x <- data.frame(x=letters[c(2,1,2)], y=1:3)
x$x
## [1] b a b
## Levels: a b
x$x <- factor(x$x, levels=unique(x$x))
x$x
## [1] b a b
## Levels: b a
如果你想阻止的,你需要在專門的手因子水平爲levels
因素排序:
factor(c("Paul McCartney", "John Lennon"), levels = c("Paul McCartney", "John Lennon"))
## [1] Paul McCartney John Lennon
## Levels: Paul McCartney John Lennon
在您的情況下,您應創建factor
,然後再創建data.frame
並將factor
粘貼到data.frame
:
f1 <- factor(c("Paul McCartney", "John Lennon"), levels = c("Paul McCartney", "John Lennon"))
my.data <- data.frame(Names = f1)
levels(my.data$Names)
## [1] "Paul McCartney" "John Lennon"
問題是,在我真實的情況下,我正在處理一個非常大的數據集,所以這不是真的可行... – Sverre
爲什麼需要這個?你在處理訂購的因素嗎? – Roland
@Roland。既然你問。我的數據框中有一列''X'',其中只有一些行有值。我想爲這些行提取第一列(''Names'')中的值。我使用''w = my.data [my.data $ X!=「NA」,] $ Names'',它會返回這些值,但也會返回一堆「NA」。所以我想通過查看「levels(w)」我可以得到我感興趣的值,但是它們的順序不能從原始數據幀改變,因爲我想將這些值與它們的值稍後在原始數據框中的「X」列。有可能有更好的方式去做這件事: -/ – Sverre
是的,還有更好的辦法。將該列設置爲字符列並使用該列。 – Roland