[R] Split values in vector

Rui Barradas ruipbarradas at sapo.pt
Sat Jan 21 05:00:22 CET 2012


Hello,

Maybe it's no longer needed but, another way would be the function below.
It's more complicated because you don't need to know that there are only for
categories.
Only the original form and the wanted output.


fun <- function(x, var.to.transform){

    f <- function(x, nm){
        if(is.na(x[1])){
            result <- rep(NA, length(nm))
        }else{
            result <- rep(0, length(nm))
            names(result) <- nm
            tmp <- unlist(strsplit(x, split="-"))
            if(length(tmp) == 1){
                result[tmp] <- 1
            }else{
                tmp <- matrix(tmp, nrow=2)
                result[tmp[1, ]] <- as.numeric(tmp[2, ])
            }
        }
        result
    }

    if(is.character(var.to.transform))
        inx.names.x <- which(var.to.transform == names(x))
    else{
        inx.names.x <- var.to.transform
        var.to.transform <- names(x)[inx.names.x]
    }

    X <- strsplit(as.character(x[, inx.names.x]),
                split = ";", fixed = TRUE)

    X.suf <- strsplit(unlist(X), split = "-", fixed = TRUE)
    X.suf <- sapply(X.suf, function(x) x[1])
    X.suf <- unique(X.suf[!is.na(X.suf)])

    X.names <- paste(var.to.transform, X.suf, sep="_")

    res <- x[, -inx.names.x]
    res[, X.names] <- t(sapply(X, f, X.suf))
    res
}


tc <- textConnection("
var1  var2  var3_00   var3_01   var3_02   var3_04
1     A     1         0         0         0
2     B     0         1         3         1
3     C     0         2         1         0
4     D     0         0         0         12
5     E     NA        NA        NA        NA 
")
wanted <- read.table(tc, header=TRUE)
close(tc)

(res1 <- fun(x, "var3"))
(res2 <- fun(x, 3))

all.equal(wanted, res1)
all.equal(wanted, res2)

Rui Barradas


--
View this message in context: http://r.789695.n4.nabble.com/Split-values-in-vector-tp4309651p4315357.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list