[R] 2 factor split and lapply

arun smartpink111 at yahoo.com
Mon Dec 23 19:13:32 CET 2013


Hi,
No problem.
If you have two columns and need the ratio, you could use ?transform
 testframe$data1 <- c(2.24,6.5,4.34)


dcast(transform(testframe,ratio=data/data1),factor2~factor1,value.var="ratio",mean)
#  factor2        a         b
#1       1 1.491071       NaN
#2       2 0.483871 0.6461538
A.K.




On Monday, December 23, 2013 10:49 AM, Onur Uncu <onuruncu at gmail.com> wrote:

Thank you Arun. May I ask a follow up question? What if the function needed to take multiple arguments? So, instead of "mean", suppose the function was  function(x,y){x/y} and suppose x and y inputs were 2 columns of a data frame. In other words, is there an mapply type function under reshape package?

thnks






On Mon, Dec 23, 2013 at 2:45 PM, arun <smartpink111 at yahoo.com> wrote:

HI,
>I think this will be more appropriate.
>
>dcast(testframe,factor2~factor1,value.var="data",mean)
>  factor2    a   b
>1       1 3.34 NaN
>2       2 2.10 4.2
>A.K.
>
>
>On Monday, December 23, 2013 9:37 AM, arun <smartpink111 at yahoo.com> wrote:
>Hi,
>You could try:
>library(reshape2)
>dcast(as.data.frame(as.table(by(testframe[,3],testframe[,-3],mean))),factor2~factor1,value.var="Freq")
>#  factor2    a   b
>#1       1 3.34  NA
>#2       2 2.10 4.2
>
>A.K.
>
>
>
>
>On Monday, December 23, 2013 9:24 AM, Onur Uncu <onuruncu at gmail.com> wrote:
>Sure, here is a reproducible example:
>
>testframe<-data.frame(factor1=c("a","b","a"),factor2=c(1,2,2),data=c(3.34,4.2,2.1))
>
>splitframe<-split(testframe,list(factor1=testframe$factor1,factor2=testframe$factor2))
>
>lapply(splitframe,function(x)mean(x[,"data"]))
>
>The above lapply returns
>
>$a.1
>[1] 3.34
>
>$b.1
>[1] NaN
>
>$a.2
>[1] 2.1
>
>$b.2
>[1] 4.2
>
>The results are correct but not presented in a format I prefer... Factor1 and factor2 are combined into a single factor, which is not desired. I want to keep them seperate. Ideally, a table output as below.
>
>     a          b
>1   3.34     NaN
>2   2.1       4.2
>
>How can I achieve this please?
>
>
>> On 23 Dec 2013, at 00:44, Bert Gunter <gunter.berton at gene.com> wrote:
>>
>> I believe you missed
>> ?tapply
>> which does what you want I think (in the absence of a reproducible
>> example one cannot be sure).
>>
>> Cheers,
>> Bert
>>
>>
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>> (650) 467-7374
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>> H. Gilbert Welch
>>
>>
>>
>>
>>> On Sun, Dec 22, 2013 at 3:54 PM, Onur Uncu <onuruncu at gmail.com> wrote:
>>> R Users,
>>>
>>> I have a data frame which I split using 2 factors using the split function:
>>>
>>> split(datframe, list(f=factor1, f2=factor2));
>>>
>>> I then used lapply to get some summary statistics grouped by factor1 and
>>> factor2.
>>>
>>> I now want to change the appearance of this output. I want to get  a 2
>>> dimensional table where columns represent values of factor1, rows represent
>>> values of factor2 and the entries on the table represent the summary
>>> results that were calculated by lapply.
>>>
>>> I tried as.table() function but did not help. It seems the problem is that
>>> R combined factor1 and factor 2 into one factor when I used list(f=factor1,
>>> f2=factor2) in the split function. So R is now unable to treat them as 2
>>> different factors in order to put them on row and columns of a table... Any
>>> ideas how I can achieve the desired table?
>>>
>>> Thanks for your help.
>>>
>>>        [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> 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.
>
>
>______________________________________________
>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.
>
>
>______________________________________________
>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