[R] How to calc ratios base on current and previous row?

Joshua Wiley jwiley.psych at gmail.com
Fri Aug 27 21:12:27 CEST 2010


Hi Marcus,

I am guessing you are thinking in terms of Excel, where in column B,
you could enter the formula =(A2 + 0.5*B1) and just drag it down
however many cells you wanted.  In R, it would be expressed a bit
differently.  If k indexes your rows, I believe you want:

B[k] = A[k] + 0.5 * B[k - 1]

Unfortunately, if this is indeed what you mean, then as Bert said "If
the calculation of B[3] now depends on the newly calculated value of
B[2], then the answer is no: you must loop."

If calculating B is just some middle step to a larger goal, there may
be another way to your end goal that does not require a loop.  For
instance, suppose all you are really interested in is a single value
of B (perhaps the last one), you can use this formula where k = the
row number of the value of B you want:

A[k] + sum(A[1:(k - 1)] * (0.5 ^ ((k - 1):1)))

Best wishes,

Josh

On Fri, Aug 27, 2010 at 10:17 AM, Marcus Drescher <drescher at tum.de> wrote:
> Hi all,
>
> I want to calculate in each row a ratio based on number in the current row and the previous row.
> Is there a way to do this without for-loops because that is extremely slow.
>
>        A       B
> [1]     2       2
> [2]     2       3
> [3]     4       5,5
> ...
>
> B2 = A2 + 0.5*B1
>
>
> Thanks in advance.
> Best
> Marcus
>
> ______________________________________________
> 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list