[R] Transform data for repeated measures
David Winsemius
dwinsemius at comcast.net
Fri Aug 28 17:13:14 CEST 2009
Patrick;
You got two helpful suggestions for where to start your learning how
to reshape your data. I am going to admit that I have recurring
difficulty using either reshape() or the functions in the reshape
package. It undoubtedly reflects some sort of "constricted abstraction
capability" on my part, but I have learned that sometimes I get what I
need from a combination of rep() and the stack() function. The
strategy is to rep() the recurring variables and stack() the repeated
measures on the same subjects
resp.df <- read.table(textConnection("patient basefev1 fev11h fev12h
fev13h fev14h fev15h fev16h fev17h fev18h drug
201 2.46 2.68 2.76 2.50 2.30 2.14 2.40 2.33
2.20 a
202 3.50 3.95 3.65 2.93 2.53 3.04 3.37 3.14
2.62 a
203 1.96 2.28 2.34 2.29 2.43 2.06 2.18 2.28
2.29 a
204 3.44 4.08 3.87 3.79 3.30 3.80 3.24 2.98
2.91 a"), header=TRUE)
closeAllConnections()
stk.resp <- data.frame(pt.id.=rep(resp.df$patient, 9), FEV1
=stack(resp.df[,2:10]), drug=rep(resp.df$drug, 9))
stk.resp
pt.id. FEV1.values FEV1.ind drug
1 201 2.46 basefev1 a
2 202 3.50 basefev1 a
3 203 1.96 basefev1 a
4 204 3.44 basefev1 a
5 201 2.68 fev11h a
6 202 3.95 fev11h a
7 203 2.28 fev11h a
8 204 4.08 fev11h a
snipped further unneeded output
HTH;
David.
On Aug 27, 2009, at 7:37 PM, Richardson, Patrick wrote:
> I have a dataset that I'm trying to rearrange for a repeated
> measures analysis:
>
> It looks like:
>
> patient basefev1 fev11h fev12h fev13h fev14h fev15h fev16h fev17h
> fev18h drug
> 201 2.46 2.68 2.76 2.50 2.30 2.14 2.40 2.33
> 2.20 a
> 202 3.50 3.95 3.65 2.93 2.53 3.04 3.37 3.14
> 2.62 a
> 203 1.96 2.28 2.34 2.29 2.43 2.06 2.18 2.28
> 2.29 a
> 204 3.44 4.08 3.87 3.79 3.30 3.80 3.24 2.98
> 2.91 a
>
> And I want to make it look like:
>
> Patient FEV time drug
> 201 2.46 0 a
> 201 2.68 1 a
> 201 2.76 2 a
> 201 2.50 3 a
>
> And so on . . . . . There would be 9 "time" and drug is a factor
> variable.
>
> I know there is a way to do this in R but I cannot remember the
> function. I've looked at the transpose function in (base) but that
> doesn't seem to be what I want. Can something like this be done
> easily from within package functions or would it require writing
> something custom? Another program would use something like the
> transpose procedure, but I'm trying to stay away from that program.
>
> Thanks,
>
> Patrick
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list