Hi, It's working for me. Try this: dat1<-read.csv("test.csv") dat2<-na.omit(dat1) nrow(dat1) #[1] 635 nrow(dat2) #[1] 627
B<-gsub(" slope{0,1}\\s\\((.*)\\)","\\1",dat2$Composition_percent_part) fun1<-function(x){ C<-gsub("(.*)/(.*)","\\1 0 0 \\2", gsub("(.*)/(.*)/(.*)","\\1 \\2 0 \\3", gsub("(.*)/(.*)/(.*)/(.*)","\\1 \\2 \\3 \\4",x))) res<-data.frame(do.call(rbind,strsplit(C," "))) colnames(res)<-paste("A",1:4,sep="") res } fun1(B) head(fun1(B),15) # A1 A2 A3 A4 #1 60 25 0 15 #2 60 25 0 15 #3 40 35 15 10 #4 40 35 15 10 #5 40 35 15 10 #6 40 35 15 10 #7 40 35 15 10 #8 50 40 0 10 #9 50 40 0 10 #10 50 40 0 10 #11 50 40 0 10 #12 50 30 0 20 #13 50 30 0 20 #14 50 30 0 20 #15 50 30 0 20 #or, fun1<-function(x){ B<-gsub(" slope{0,1}\\s\\((.*)\\)","\\1",x) C<-gsub("(.*)/(.*)","\\1 0 0 \\2", gsub("(.*)/(.*)/(.*)","\\1 \\2 0 \\3", gsub("(.*)/(.*)/(.*)/(.*)","\\1 \\2 \\3 \\4",B))) res<-data.frame(do.call(rbind,strsplit(C," "))) colnames(res)<-paste("A",1:4,sep="") res } fun1(dat2$Composition_percent_part) head(fun1(dat2$Composition_percent_part),5) # A1 A2 A3 A4 #1 60 25 0 15 #2 60 25 0 15 #3 40 35 15 10 #4 40 35 15 10 #5 40 35 15 10 A.K. ________________________________ From: Sapana Lohani <lohani.sap...@ymail.com> To: arun <smartpink...@yahoo.com> Sent: Sunday, September 2, 2012 8:39 PM Subject: Re: [R] splits with 0s in middle columns Hi Arun, I do not know whats wrong with my data, so am sending you the whole column I wanted to split. Could you please have a look and suggest me the error? I ma totally stuck at this point of my analysis ________________________________ From: arun <smartpink...@yahoo.com> To: Rui Barradas <ruipbarra...@sapo.pt> Cc: Sapana Lohani <lohani.sap...@ymail.com>; R help <r-help@r-project.org> Sent: Sunday, September 2, 2012 1:54 PM Subject: Re: [R] splits with 0s in middle columns HI, You can also try this as a function: fun1<-function(x){ B<-gsub("percent{0,1}\\s\\((.*)\\)","\\1",x) C<-gsub("(.*)/(.*)","\\1 0 0 \\2", gsub("(.*)/(.*)/(.*)","\\1 \\2 0 \\3", gsub("(.*)/(.*)/(.*)/(.*)","\\1 \\2 \\3 \\4",B))) dat1<-data.frame(do.call(rbind,strsplit(C," "))) colnames(dat1)<-paste0("A",1:4) dat1 } fun1(A) # A1 A2 A3 A4 #1 10 20 0 30 #2 40 0 0 20 #3 60 10 10 5 #4 80 0 0 10 A.K. ----- Original Message ----- From: Rui Barradas <ruipbarra...@sapo.pt> To: Sapana Lohani <lohani.sap...@ymail.com> Cc: r-help <r-help@r-project.org> Sent: Sunday, September 2, 2012 1:05 PM Subject: Re: [R] splits with 0s in middle columns 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. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.