[R] help with calculation from dataframe with multiple entries per sample

Phil Spector spector at stat.berkeley.edu
Tue Sep 18 01:56:16 CEST 2012


Julie -
    Since the apply functions operate on one row at a time, they
can't do what you want.  I think the easiest way to solve your 
problem is to reshape the data set, and merge it back with the 
original:

> dd = data.frame(Sample=c(1,1,1,2,2,2,3,3,3),
+                 Time=c(1,2,3,1,2,3,1,2,3),
+                 Mass=c(3,3.1,3.4,4,4.3,4.4,3,3.2,3.5))
> rdd = reshape(dd,timevar='Time',idvar='Sample',direction='wide')
> rdd$"Gain2-3" = rdd$Mass.3 - rdd$Mass.2
> merge(dd,subset(rdd,select=c('Sample',"Gain2-3")))
   Sample Time Mass Gain2-3
1      1    1  3.0     0.3
2      1    2  3.1     0.3
3      1    3  3.4     0.3
4      2    1  4.0     0.1
5      2    2  4.3     0.1
6      2    3  4.4     0.1
7      3    1  3.0     0.3
8      3    2  3.2     0.3
9      3    3  3.5     0.3

You may want to avoid using special characters like dashes in variable
names.

Hope this helps.

 					- Phil Spector
 					 Statistical Computing Facility
 					 Department of Statistics
 					 UC Berkeley
 					 spector at stat.berkeley.edu




On Mon, 17 Sep 2012, Julie Lee-Yaw wrote:

> Hi?
>
> I have a dataframe similar to:
>
>> Sample<-c(1,1,1,2,2,2,3,3,3)
>
>> Time<-c(1,2,3,1,2,3,1,2,3)
>
>> Mass<-c(3,3.1,3.4,4,4.3,4.4,3,3.2,3.5)
>
>> mydata<-as.data.frame(cbind(Sample,Time,Mass))
>
>
> ? Sample Time Mass
> 1 ? ? ?1 ? ?1 ?3.0
> 2 ? ? ?1 ? ?2 ?3.1
> 3 ? ? ?1 ? ?3 ?3.4
> 4 ? ? ?2 ? ?1 ?4.0
> 5 ? ? ?2 ? ?2 ?4.3
> 6 ? ? ?2 ? ?3 ?4.4
> 7 ? ? ?3 ? ?1 ?3.0
> 8 ? ? ?3 ? ?2 ?3.2
> 9 ? ? ?3 ? ?3 ?3.5
>
> where for each sample, I've measured mass at different points in time.?
>
> I now want to calculate the difference between Mass at Time 2 and 3 for each unique Sample and store this as a new variable called "Gain2-3". So in my example three values of 0.3,0.1,0.3 would be calculated for my three unique samples and these values would be repeated in the table according to Sample. I am thus expecting:
>
>> mydata #after adding new variable
>
> ? Sample Time MassGain2-3
> 1 ? ? ?1 ? ?1 ?3.00.3
> 2 ? ? ?1 ? ?2 ?3.1 0.3
> 3 ? ? ?1 ? ?3 ?3.4 0.3
> 4 ? ? ?2 ? ?1 ?4.0 0.1
> 5 ? ? ?2 ? ?2 ?4.3 0.1
> 6 ? ? ?2 ? ?3 ?4.4 0.1
> 7 ? ? ?3 ? ?1 ?3.0 0.3
> 8 ? ? ?3 ? ?2 ?3.2 0.3
> 9 ? ? ?3 ? ?3 ?3.5 0.3
>
> Does anyone have any suggestions as to how to do this? I've looked at the various apply functions but I can't seem to make anything work. I'm fairly new to R and would appreciate specific suggestions.?
>
> Thanks!
> 	[[alternative HTML version deleted]]
>
>




More information about the R-help mailing list