Sorry about the formatting in that previous email. Here it is again, hopefully with the correct formatting this time.
Assuming that the data frame is called m, you can - split the data frame by the values of siteid and date - apply a function to create the new data frame for each such group and - use rbind to put it back together like this: fn <- function(x) { y <- t(x[,4:5]) data.frame( siteid=x[1,1], date=x[1,2], name=colnames(x)[4:5], x01=y[,1], x02=y[,2], x03=y[,3] ) } m <- do.call( "rbind", lapply(split(m,list(m$siteid,m$date)),fn) ) If order matters, add this: m <- m[order(m$siteid,m$date),] --- On Mon 09/29, < [EMAIL PROTECTED] > wrote: From: [mailto: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Date: Mon, 29 Sep 2003 13:15:36 -0400 Subject: [R] Data frame transpose <br><br><br><br>Hi All,<br><br>I want to ask if there is a transpose function for data frame like the<br>procedure of transpose in SAS? Because I want to partially transpose a<br>data frame which contains 5 columns (siteid, date, time, obs, mod), what<br>I want to do is to put time as the column variables along with siteid,<br>and date, and put obs and mod in the row names. specifically to<br>transpose a data frame:<br><br>siteid date time obs mod<br> A 7/8 01 2 5<br> A 7/8 02 3 8<br> A 7/8 03 5 8<br> A 7/9 01 3 6<br> A 7/9 02 5 8<br> A 7/9 03 6 7<br> ......<br> B 7/8 01 4 7<br> B 7/8 02 7 19<br> B 7/8 03 4 9<br> ......<br><br>To<br><br>siteid date! name 01 02 03 ....<br>A 7/8 obs 2 3 5<br>A 7/8 mod 5 8 8<br>A 7/9 obs 3 5 6<br>A 7/9 mod 6 8 7<br> .......<br>B 7/8 obs 4 7 4<br>B 7/8 mod 7 19 9<br> ........<br><br><br>Thank you very much!<br><br>Dave<br><br>______________________________________________<br>[EMAIL PROTECTED] mailing list<br>https://www.stat.math.ethz.ch/mailman/listinfo/r-help<br> _______________________________________________ No banners. No pop-ups. No kidding. Introducing My Way - http://www.myway.com ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help