Dataframes: conditional calculations per row .
You can use 'ifelse':
x <- data.frame(id=sample(1:4,20,TRUE)) # use ifelse to do the calculations x$cal <- ifelse(x$id == 1, 21,
+ ifelse(x$id == 2, 221, + ifelse(x$id == 3, 2221, 22221)))
x
id cal 1 4 22221 2 1 21 3 3 2221 4 1 21 5 2 221 6 2 221 7 1 21 8 2 221 9 4 22221 10 2 221 11 2 221 12 3 2221 13 2 221 14 1 21 15 4 22221 16 3 2221 17 4 22221 18 1 21 19 3 2221 20 2 221 On Mon, Feb 9, 2009 at 5:11 PM, Jes?s Guillermo Andrade
<jgandradev at mac.com> 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 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.
Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?