[R] avoiding loop
David Winsemius
dwinsemius at comcast.net
Sun Nov 1 03:26:17 CET 2009
This is pretty much equivalent:
tapply(DF$value[DF$choice==1], DF$time[DF$choice==1], sum) /
tapply(DF$value, DF$time, sum)
And both will probably fail if the number of groups with choice==1 is
different than the number overall.
--
David.
On Oct 31, 2009, at 5:14 PM, Dimitris Rizopoulos wrote:
> one approach is the following:
>
> # say 'DF' is your data frame, then
> with(DF, {
> ind <- choice == 1
> n <- tapply(value[ind], time[ind], sum)
> d <- tapply(value, time, sum)
> n / d
> })
>
>
> I hope it helps.
>
> Best,
> Dimitris
>
>
> parkbomee wrote:
>> Hi all,
>> I am trying to figure out a way to improve my code's efficiency by
>> avoiding the use of loop.
>> I want to calculate a conditional mean(?) given time.
>> For example, from the data below, I want to calculate sum((value|
>> choice==1)/sum(value)) across time.
>> Is there a way to do it without using a loop?
>> time cum_time choice value
>> 1 4 1 3
>> 1 4 0 2
>> 1 4 0 3
>> 1 4 0 3
>> 2 6 1 4
>> 2 6 0 4
>> 2 6 0 2
>> 2 6 0 4
>> 2 6 0 2
>> 2 6 0 2 3 4
>> 1 2 3 4 0 3 3
>> 4 0 5 3 4 0 2
>> My code looks like
>> objective[1] = value[1] / sum(value[1:cum_time[1])
>> for (i in 2:max(time)){
>> objective[i] = value[cum_time[i-1]+1] /
>> sum(value[(cum_time[i-1]+1) : cum_time[i])])
>> }
>> sum(objective)
>> Anyone have an idea that I can do this without using a loop??
>> Thanks.
>>
>> _________________________________________________________________
>> [[elided Hotmail spam]]
>> [[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.
>
> --
> Dimitris Rizopoulos
> Assistant Professor
> Department of Biostatistics
> Erasmus University Medical Center
>
> Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
> Tel: +31/(0)10/7043478
> Fax: +31/(0)10/7043014
>
> ______________________________________________
> 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
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list