连接有序向量

时间:2015-12-03 06:00:22

标签: r

时如何连接两个有序向量
  1. 他们有相同的因素和排序,或
  2. 他们有非重叠因素吗?
  3. 以下两种方法(1)不起作用(第一种返回整数向量,第二种返回因子向量):

    o1 <- ordered(c('a', 'b'), levels = c('c', 'b', 'a'))
    o2 <- ordered(c('c'),      levels = c('c', 'b', 'a'))
    
    c(o1, o2)
    #> [1] 3 2 1
    
    unlist(list(o1, o2))
    #> [1] a b c
    #> Levels: c b a
    

1 个答案:

答案 0 :(得分:1)

  1. 当他们有相同的因素和排序时,

    ordered(c(o1, o2), levels = 1:nlevels(o1), labels = levels(o1))
    #> [1] a b c
    #> Levels: c < b < a
    
  2. 当他们有非重叠因素时,最好明确定义您希望新订单的内容:

    p1 <- ordered(c('a', 'b'), levels = c('b', 'a'))
    p2 <- ordered(c('c'))
    
    new_order <- as.list(c(levels(p2), levels(p1)))
    names(new_order) = new_order
    levels(p1) <- new_order
    levels(p2) <- new_order
    
    ordered(c(p1, p2), levels = 1:length(new_order), labels = new_order)
    #> [1] a b c
    #> Levels: c < b < a
    

    或者,如果你喜欢危险的编码,你可以让rbind使用它的黑暗魔法:

    d = rbind(data.frame(a = p1), data.frame(a = p2))
    d$a
    #> [1] a b c
    #> Levels: b < a < c
    

    (请注意,您失去了对因子排序的控制权。)