基于这个问题,我点了date.frame dd有两个因素b和x
dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), levels = c("Low", "Med", "Hi"), ordered = TRUE),
x = factor(c("A", "D", "A", "C")),
y = c(8, 3, 9, 9),
z = c(1, 1, 1, 2))
dd <- dd[with(dd, order(b, x)), ]
b x y z
Low C 9 2
Med D 3 1
Hi A 8 1
Hi A 9 1
Run Code Online (Sandbox Code Playgroud)
级别的顺序dd$x不反映dd $ x的实际顺序,但是按字母顺序排列.
levels(dd$x)
[1] "A" "C" "D"
Run Code Online (Sandbox Code Playgroud)
我想要与data.frame中相同的级别顺序,即"C","D","A"
我当然可以这样做
dd$x <- factor(dd$x, levels = c("C","D","A"))
Run Code Online (Sandbox Code Playgroud)
但我需要一些普遍的东西.我试过了
dd$x <- factor(as.character(dd$x))
Run Code Online (Sandbox Code Playgroud)
但是关卡的帮助状态:
default是as.character(x)采用的唯一值集,按x的递增顺序排序.
我怎样才能拥有独特的价值,即"未分类"?
我试图理解功能因素,特别是参数水平因素,但这是出于我有限的理解.
我找到了解决方案,但我无法应用它:
dd <- within(dd, x <- reorder(x, b))
Run Code Online (Sandbox Code Playgroud)
这应该是一般解决方案:
> factor(dd$x, as.character(unique(dd$x)))
[1] A D A C
Levels: A D C
Run Code Online (Sandbox Code Playgroud)
但是,您的示例数据似乎与您描述的预期结果不符.
我想你可能也想要:
> factor(dd$x, rev(as.character(unique(dd$x))))
[1] A D A C
Levels: C D A
Run Code Online (Sandbox Code Playgroud)