2015-12-03 37 views
0

我如何可以連接兩個有序向量時串聯有序載體

  1. 它們具有相同的因素和訂購,或
  2. 他們有不重疊的因素是什麼?

這裏有兩種方法:(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
  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 
    

    (請注意,你會失去對因子排序一些控制)。