[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