[R] splits with 0s in middle columns

Rui Barradas ruipbarradas at sapo.pt
Sun Sep 2 19:05:09 CEST 2012


Hello,

You don't need a new function, what you need is to prepare your data in 
such a way that the function can process it.


A <- c("percent (10/20/30)", "percent (40/20)", "percent (60/10/10/5)",
"percent (80/10)")
B <- gsub("\\(|\\)|percent| ", "", A)
fun(B)

Also, please use dput to post the data examples,

dput(A)
c("percent (10/20/30)", "percent (40/20)", "percent (60/10/10/5)",
"percent (80/10)")

Then copy&paste in your post.

Rui Barradas

Em 02-09-2012 04:22, Sapana Lohani escreveu:
> Dear Rui,
>
> The new code works fine for what I wanted. I have another similar column but it looks like
>
> A
> percent (10/20/30)
> percent (40/20)
> percent (60/10/10/5)
> percent (80/10)
>
> I want a similar split but delete the percent in the front. The output should look like
>
> A1 A2 A3 A4
> 10 20 0 30
> 40 0 0 20
> 60 10 10 5
> 80 0 0 10
>
> Could you please make the small change in the code that you gave me. It must be a small edition but I could not figure that out. FYI the code that worked was
>
> fun <- function(X){
>       xname <- deparse(substitute(X))
>       s <- strsplit(X, "/")
>       n <- max(sapply(s, length))
>       tmp <- numeric(n)
>
>       f <- function(x){
>           x <- as.numeric(x)
>           m <- length(x)
>           if(m > 1){
>               tmp[n] <- x[m]
>               tmp[seq_len(m - 1)] <- x[seq_len(m - 1)]
>           }else tmp[1] <- x
>           tmp
>       }
>
>       res <- do.call(rbind, lapply(s, f))
>       colnames(res) <- paste(xname, seq_along(s), sep = "")
>       data.frame(res)
> }
>
> fun(A)
>
> Thank you so very much.




More information about the R-help mailing list