[R] Transform variable number of rows per subject to column variables?
ggrothendieck at gmail.com
Tue Sep 20 07:55:13 CEST 2005
On 9/20/05, Bing Ho <2bingho at stanford.edu> wrote:
> I am very new to R, but I am having trouble with my dataset.
> I have a data frame where a subject has a variable number of multiple
> observations for each row, which I wish the transform these
> observations to column variables.
> An example of the data frame
> ID TEST.A TEST.B
> 1 10 1
> 1 13 2
> 1 11 1
> 2 15 2
> 2 17 3
> And I wish to transform it to the following:
> ID TEST.A1 TEST.A2 TEST.A3 TEST.B1 TEST.B2 TEST.B3
> 1 10 13 11 1 2 1
> 2 15 17 NA 2 3 NA
> In other words, for the variable number of repeated follow up
> studies, a new column variable for each subject, but they are grouped
> by the original test.
First manufacture a "time" column and then use reshape:
tt <- sequence(rle(DF$ID)$lengths)
reshape(cbind(tt, DF), idvar = "ID", timevar = "tt", direction = "wide")
Another possibility is to use the reshape package:
DF.d <- deshape(cbind(tt, DF), id = 1:2) # same tt as above
reshape(DF.d, ID ~ variable + tt)
More information about the R-help