On Mar 24, 2014, at 9:02 AM, Tham Tran wrote: > Dears R Users, > > I have another question on function "stack". > > Given a data frame like: > df=data.frame(a=c(3,5),b=c(2,8),a=c(9,1),b=c(6,4),check.names=F) > a b a b > 3 2 9 6 > 5 8 1 4 >
I did not create your stack function which would have masked the base function. You would probably not want to do that. Better to name it `mystack` or somesuch. Yours looks very similar to the code of the utils::stack. getAnywhere(stack.data.frame) function (x, select, ...) { if (!missing(select)) { nl <- as.list(1L:ncol(x)) names(nl) <- names(x) vars <- eval(substitute(select), nl, parent.frame()) x <- x[, vars, drop = FALSE] } keep <- unlist(lapply(x, is.vector)) if (!sum(keep)) stop("no vector columns were selected") if (!all(keep)) warning("non-vector columns will be ignored") x <- x[, keep, drop = FALSE] data.frame(values = unlist(unname(x)), ind = factor(rep.int(names(x), lapply(x, length))), stringsAsFactors = FALSE) } > stack(df) # the utils::stack.data.frame values ind 1 3 a 2 5 a 3 2 b 4 8 b 5 9 a.1 6 1 a.1 7 6 b.1 8 4 b.1 It would be pretty easy to reassign the items with dots in the ind factor and rbind(stack(df[1:2]), stack(df[3:4]) ) #--------- values ind 1 3 a 2 5 a 3 2 b 4 8 b 5 9 a 6 1 a 7 6 b 8 4 b -- David. > I would like to form a new data frame like: > values ind > 1 3 a > 2 5 a > 3 2 b > 4 8 b > 5 9 a > 6 1 a > 7 6 b > 8 4 b > > I arrived with the script: > stack = function (x, ...) > { > x = as.list(x) > keep = unlist(lapply(x, is.vector)) > if (!sum(keep)) > stop("at least one vector element is required") > if (!all(keep)) > warning("non-vector elements will be ignored") > x = x[keep] > data.frame(values = unlist(unname(x)), ind = factor(rep.int(names(x), > lapply(x, length))), stringsAsFactors = FALSE, ...) > } > stack(df, check.names = FALSE) > > Do you have any other simple manner to that? > > Thanks in advance for your helps! > > Tham > > > > > -- > View this message in context: > http://r.789695.n4.nabble.com/function-Stack-tp4687449.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. David Winsemius Alameda, CA, USA ______________________________________________ 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.