[R] Splicing factors without losing levels

Titus von der Malsburg malsburg at gmail.com
Tue Jun 9 11:12:18 CEST 2009


Hi list!

An operation that I often need is splicing two vectors:

  > splice(1:3, 4:6)
  [1] 1 4 2 5 3 6

For numeric vectors I use this hack:

  splice <- function(x, y) {
    xy <- cbind(x, y)
    xy <- t(xy)
    dim(xy) <- length(x) * 2
    return(xy)
  }

So far, so good (?).  But I also need splicing for factors and I tried
this:

  splice <- function(x, y) {
    xy <- cbind(x, y)
    xy <- t(xy)
    dim(xy) <- length(x) * 2
    if (is.factor(x) && is.factor(y)) {
      xy <- as.factor(xy)
      levels(xy) <- levels(x)
    }
    return(xy)
  }

This, however, doesn't work because the level name to integer mapping
gets mixed up when copying the levels from x to xy.

My questions:

 1.) How can this be fixed?
 2.) What's the best way to do splicing of vectors and factors in R?
 (I couldn't find a prefdefined function for this although it seems to be
 such a basic and useful operation.)

Thanks!!

 Titus




More information about the R-help mailing list