Re: [R] 'splice' two data frames

From: Peter Wolf <s-plus_at_wiwi.uni-bielefeld.de>
Date: Thu 25 Aug 2005 - 19:26:02 EST

what about:

@
<<*>>=
z<-data.frame(matrix(rbind(x,y),nrow(x),2*ncol(x))) rownames(z)<-rownames(x)
z
@
output-start
Thu Aug 25 11:24:29 2005
  X1 X2 X3 X4 X5 X6 X7 X8

a  2 0.02  1 0.01  2 0.02  2 0.02
b  3 0.03  0 0.00  4 0.04  3 0.03
c  3 0.03  2 0.02  1 0.01  6 0.06
d  3 0.03  4 0.04  2 0.02  3 0.03
e  4 0.04  1 0.01  4 0.04  2 0.02
f  2 0.02  5 0.05  2 0.02  2 0.02
g  4 0.04  5 0.05  3 0.03  3 0.03
h  3 0.03  3 0.03  5 0.05  4 0.04
i  1 0.01  0 0.00  3 0.03  3 0.03

output-end

Peter Wolf

David Whiting wrote:
>Hi,
>
>I often need to take columns from two data.frames and 'splice' them
>together (alternately taking a column from the first data frame, then
>from the second). For example:
>
>x <- table(sample(letters[1:9], 100, replace=TRUE),
> sample(letters[1:4], 100, replace=TRUE))
>y <- prop.table(x)
>
>splice <- function (x, y) {
> z <- matrix(rep(NA, (ncol(x) * 2) * nrow(x)), nrow = nrow(x))
> j <- 1
> for (i in seq(1, ncol(z), by = 2)) {
> z[, i] <- x[, j]
> z[, (i + 1)] <- y[, j]
> j <- j + 1
> }
> z <- data.frame(z)
> rownames(z) <- rownames(x)
> z
>}
>
>splice(x, y)
>
>
>Manually using indexing I can do this:
>
>zz <- data.frame(x[, 1], y[, 1], x[, 2], y[, 2], x[, 3], y[, 3], x[, 4],
>y[, 4])
>
>
>I *feel* that it should be possible in R to generate the sequence of
>column indexes automatically. I can get close with this:
>
>i <- paste("x[,", 1:ncol(x), "], ",
> "y[,", 1:ncol(y), "]",
> collapse=", ")
>
>which creates a string version of what I want, but I am not sure how to
>use that with data.frame. FAQ 7.21 ("How can I turn a string into a
>variable?") looked promising but I have not been able to apply any of
>the suggestions to this problem. I also tried using do.call:
>
>i <- paste("x[,", 1:4, "],", "y[,", 1:4, "]", collapse=",")
>i <- gsub("],", "]@", i) # Create a marker for
>i <- strsplit(i, "@") # strsplit to create a list
>do.call(data.frame, i)
>
>and with lapply:
>
>lappy(i, data.frame)
>
>These "did not work" (i.e. they worked as they were designed to and did
>not give me the results I am after).
>
>I think I need a nudge or two in the right direction.
>
>Thanks.
>
>Dave
>
>



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Thu Aug 25 19:30:56 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:39:55 EST