【问题标题】:How to order the levels of factors according to the ordering of a data.frame (and not alphabetically)如何根据 data.frame 的顺序(而不是按字母顺序)对因子的级别进行排序
【发布时间】:2014-09-25 17:05:54
【问题描述】:

基于this question,我订购了一个带有两个因素bx的日期框架dd

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

dd$x的级别顺序不反映dd$x的实际顺序,而是按字母顺序排列。

levels(dd$x)
[1] "A" "C" "D"

我想要与 data.frame 中相同的级别顺序,即 ,"C","D","A"

当然可以do this

dd$x <- factor(dd$x, levels = c("C","D","A"))

但我需要一些通用的东西。我试过了

dd$x <- factor(as.character(dd$x))

但关卡的帮助状态:

default 是 as.character(x) 采用的唯一值集,按 x 升序排列。

我怎样才能拥有唯一的价值 sef,即“未排序”?

我试图了解函数因素,尤其是参数级别因素,但这超出了我的有限理解范围。

我找到了solution,但我无法应用它:

dd <- within(dd, x <- reorder(x, b))

【问题讨论】:

  • 根据您的示例数据,级别的顺序是 A D C,而不是 D A C。
  • 对,我的意思是“C”“D”“A”

标签: r factors


【解决方案1】:

这应该是一个通用的解决方案:

> factor(dd$x, as.character(unique(dd$x)))
[1] A D A C
Levels: A D C

然而,您的示例数据似乎与您描述的预期结果不符。

我猜你可能也想要:

> factor(dd$x, rev(as.character(unique(dd$x))))
[1] A D A C
Levels: C D A

【讨论】:

    【解决方案2】:

    试试这个:

    levels(dd$x) <- rev(unique(rev(dd$x)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多