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

Rui Barradas ruipbarradas at sapo.pt
Tue Sep 18 02:10:25 CEST 2012


Or diff(x[2:3])

Rui Barradas
Em 18-09-2012 01:05, David Winsemius escreveu:
> On Sep 17, 2012, at 5:00 PM, David Winsemius wrote:
>
>> On Sep 17, 2012, at 4:15 PM, 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))
>> Please tell me where you learned that as.data.frame(cbind(.)) construction.
>>
>>> (
>>>   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
>> mydata$gain2.3 <- with( mydata, ave( Mass , Time, FUN=function(x) diff(x[2],x[3]) ) )
> OOOPpps  .... the code above was a failed attempt.
>>>   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
>
> ... the code below should "work".
>
>>> mydata$gain2.3 <- with( mydata, ave( Mass , Sample, FUN=function(x) (x[3]-x[2]) ) )
>>> mydata
>>   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
>>
>>> 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.
>> -- 
>> David Winsemius, MD
>> Alameda, CA, USA
>>
>> ______________________________________________
>> R-help at 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.
> David Winsemius, MD
> Alameda, CA, USA
>
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list