Hi: # Start with some fictitious data: > firm <- rep(1:10, each = 5) > year <- rep(2002:2006, 10) > resp <- rnorm(50) > dat.long <- data.frame(firm = firm, year = year, resp = resp) > head(dat.long) firm year resp 1 1 2002 -0.77367688 2 1 2003 -0.79069791 3 1 2004 0.69257133 4 1 2005 2.46788204 5 1 2006 0.38892289 6 2 2002 -0.03521033 # Reshape to wide format > dat.wide <- reshape(dat.long, direction = 'wide', idvar = 'firm', timevar = 'year') > head(dat.wide) firm resp.2002 resp.2003 resp.2004 resp.2005 resp.2006 1 1 -0.77367688 -0.79069791 0.69257133 2.4678820 0.3889229 6 2 -0.03521033 -0.01071611 -0.74209425 1.3697428 -1.2277544 11 3 0.29621976 0.28208192 -2.11044822 0.0665793 -0.1803621 16 4 0.84738878 0.50286270 2.44455234 0.6908494 2.2145275 21 5 -0.15898812 -0.41355723 0.13134838 -0.8689705 -0.9267220 26 6 -1.95177791 0.12495833 0.06847564 1.1842542 -1.1663808
You can also use the function cast() from the reshape package: library(reshape) dat.cast <- cast(dat.long, firm ~ year) > dat.cast firm 2002 2003 2004 2005 2006 1 1 -0.77367688 -0.79069791 0.69257133 2.4678820 0.3889229 2 2 -0.03521033 -0.01071611 -0.74209425 1.3697428 -1.2277544 3 3 0.29621976 0.28208192 -2.11044822 0.0665793 -0.1803621 4 4 0.84738878 0.50286270 2.44455234 0.6908494 2.2145275 5 5 -0.15898812 -0.41355723 0.13134838 -0.8689705 -0.9267220 6 6 -1.95177791 0.12495833 0.06847564 1.1842542 -1.1663808 7 7 -0.30278432 -0.30268288 0.79178229 0.5302185 -0.3203084 8 8 0.54863467 -0.28418721 -0.29055958 -1.6944445 -1.1673587 9 9 -0.79943512 -1.54412306 0.26626485 -0.8761801 -1.8362077 10 10 -0.82616345 -0.28643172 0.12032793 -1.2606434 0.6109601 > class(dat.cast) [1] "cast_df" "data.frame" names(dat.cast)[2:6] <- paste('y', 2002:2006, sep = '') HTH, Dennis On Fri, Jan 22, 2010 at 2:04 PM, ivo welch <ivo...@gmail.com> wrote: > dear R wizards: I am wrestling with reshape. I have a long data set > that I want to convert into a wide data set, in which rows are firms > and columns are years. > > > summary(rin) > firm fyear sim1 > Min. :1004.00 Min. :1964.0 Min. : -1.00000 > 1st Qu.:1010.00 1st Qu.:1979.0 1st Qu.: -0.14334 > Median :1016.00 Median :1986.0 Median : 0.00116 > Mean :1016.34 Mean :1986.1 Mean : 1.03475 > 3rd Qu.:1021.00 3rd Qu.:1993.2 3rd Qu.: 0.26931 > Max. :1034.00 Max. :2007.0 Max. :110.66860 > S.D. : 9.26 S.D. : 10.0 S.D. : 8.37811 > T-stat :1551.59 T-stat :2804.7 T-stat : 1.69344 > Obs. : 200.00 Obs. : 200.0 Obs. :188.00000 > NA's : 12.00000 > > the firms and years are both ordered. I tried reshape(rin, > timevar="fyear", idvar="gvkey", direction="wide"), and the shape seems > to be what I want, but the columns come out in random order > (sim1.1980, then sim1.2001, then sim1.1977) and so on. I would like > years to go from left to right, too. Is there an easy way to > accomplish this? > > sincerely, > > /iaw > ---- > Ivo Welch (ivo.we...@brown.edu, ivo.we...@gmail.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. > [[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.