当我在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
在您的情况下,您应该在创建 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"
is.na
来检查是否存在NA
值,例如:my.data[!is.na(my.data$X),"Names"]
。 - Roland