One way. there may be better. The apply function will work with just one row (or one column) at a time.

> DF
   Month Week Estpassage MedFL
1   July   27        665    34
2   July   28       2232    35
3   July   29       9241    35
4   July   30      28464    35
5    Aug   31      41049    35
6    Aug   32      82216    35
7    Aug   33     230411    35
8    Aug   34     358541    35
9   Sept   35     747839    35
10  Sept   36     459682    36
11  Sept   37     609567    36
12  Sept   38     979475    36
13  Sept   39     837189    36

Build a function, say we call it switch.cond:

 switch.cond <- function (x) {
if (x["Week"] >= 33) return( fun1(x) ) else return( fun2(x) ) }

 # Build two more functions to handle the dispatched rows

 fun1 <-function(x){ cat("do function 1\n") }
# replace the cat-call with your first calculation

 fun2 <-function(x){ cat("do function 2\n") }
# and use various x["<colname>"]'s as arguments

> apply(DF, 1, switch.cond)
do function 2
do function 2
do function 2
do function 2
do function 2
do function 2
do function 1
do function 1
do function 1
do function 1
do function 1
do function 1
do function 1
NULL

HTH:
David Winsemius



On Feb 9, 2009, at 5:11 PM, Jesús Guillermo Andrade wrote:

Dear Sirs: I've been working with several variables in a dataframe
that serve as part of a calculation that I need to perform in a
different way depending on its value. Let me explain:

The main dataframe is called llmcc

llmcc : 'data.frame':   283 obs. of  11 variables:
 $ Area     : num  308.8 105.6 51.4 51.4 52.9 ...
 $ mFondo   : num  30.1 10 10.2 10.2 40.4 ...
 $ mFachada : num  22.95 6.7 4.72 4.72 4.72 ...
 $ Marca    : Factor w/ 132 levels "AA_Movilnet",..: 11 32 82 82 32
32 32 32 32 32 ...
 $ Clase    : int  8 4 1 1 1 1 1 1 12 1 ...
 $ Categoria: int  2 6 6 6 1 1 1 1 1 1 ...
 $ Phi      : num  0.128 0.147 0.217 0.217 0.887 ...
 $ Rf       : num  0.119 0.102 0.147 0.147 0.143 ...
 $ OldA     : num  0.737 0.258 0.375 0.375 0.385 ...
 $ OldCondo : num  4436 1555 2260 2260 2318 ...
 $ NewA_Jon : num  1.069 0.368 0.256 0.256 0.264 ...

I perform an initial operation using the original variables plus one
numeric (Abase) that is external and has the same number of rows than
the dataframe:

alitemp  <- ((Abase/llmcc$Clase)*PClase)+(((1/llmcc
$Categoria)*Abase)*PCategoria)+((Abase*llmcc$Phi)*PPhi)+((Abase*llmcc
$Rf)*PRf)

So, after I obtain the results of this calculation, I append the
series by creating an additional column within the original dataframe:
l
lmcc$Alitmp  <- alitemp

Problem is: I need to calculate a new column using a formula that has
different structure depending on the values of llmcc$Clase, thus: for
any given row of llmcc where llmcc$Clase is >= 10 i would have to
perform some operations with other values in the same row that are, by
definition, different than the ones I would need in case of lmcc$Clase
is < 10.
I've managed to break down the original dataframe by using subsets,
and then performing the calculations, but then it is complicated to
put the results in the same order of the original dataframe.
I understand the workings of the control structures available in R but
after reading the docs and help files, I can´t figure how to perform a
conditional calculation row by row that checks first the values of a
given column and then applies the corresponding operation to another
column, so it outputs a series in the same exact order as the dataframe.

Any light that you might share with me over this will be highly
appreciated.

Thanks in advance.


Guillermo.



Nunca le preguntes a un peluquero si necesitas un corte de pelo. Ley
de Murray.
------------------------------
Jesús Guillermo Andrade (Abg.)
Gerente de Litigios y Corporativo. EDM. AC. API.
Andrade & Moreno S.C. (http://amlegal.wordpress.com/)


        [[alternative HTML version deleted]]

______________________________________________
R-help@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@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.

Reply via email to