I have a matrix, called data. I used the code below to rearrange the data such that the first column remains the same, but the y value falls under either columns 2, 3 or 4, depending on the value of z. If z=1 for example, then the value of y will fall under column 2, if z=2, the value of y falls under column 3, and so on.
data x y z [1,] 50 13 1 [2,] 14 8 2 [3,] 3 7 3 [4,] 4 16 1 [5,] 6 8 2 [6,] 10 2 3 [7,] 15 11 1 [8,] 14 9 3 > data1 <- data.frame(matrix(0, length(x), ncol(data)+1)) > colnames(data1) <- c("x","y1","y2","y3") > data1$x <- data[,1] > data1$y1 <- apply(data, 1, function(x) (ifelse(x[3]==1,x[2],NA))) > data1$y2 <- apply(data, 1, function(x) (ifelse(x[3]==2,x[2],NA))) > data1$y3 <- apply(data, 1, function(x) (ifelse(x[3]==3,x[2],NA))) > data1 x y1 y2 y3 1 50 13 NA NA 2 14 NA 8 NA 3 3 NA NA 7 4 4 16 NA NA 5 6 NA 8 NA 6 10 NA NA 2 7 15 11 NA NA 8 14 NA NA 9 I used the apply function (three times) to generate the output below, which is as I wish to have it. Can any one write for me a for loop that would produce the same results. Thanks in advance. JN [[alternative HTML version deleted]] ______________________________________________ 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.