On Thu, 2009-10-29 at 01:47 -0700, Fran100681 wrote: > Hi to all, > I have this dataframe (I show the first six rows) > > >head(table) > > A R Fold.Change P.Value > Count1 Count2 > 1 ENSRNOE00000000002_at 0 1.13 0.60 1 > 1 > 2 ENSRNOE00000000009_at 0 -1.04 0.73 3 > 3 > 3 ENSRNOE00000000020_at 0 -1.08 0.68 0 > 0 > 4 ENSRNOE00000000021_at 0 -1.31 0.20 1 > 2 > 5 ENSRNOE00000000023_at 0 -1.06 0.64 3 > 3 > 6 ENSRNOE00000000024_at 0 -1.14 0.40 3 > 3 > > I would like to generate a function that determine for each row a new value > (resulting in a new vector of values to add to the dataframe). > The function should give for every row the same value showed in column "R". > However,I need of this because not all the R-values reported in this table > are correctly determined following the criteria mentioned below. > > > These new values calculated by the function must be: > > 1)"UP" > if all the following conditions are verified in a certain row: > Fold.Change is >= +1.5, > P.Value is < 0.05 > Count1 >= 2 > > 2)"DOWN" > if all the following conditions are verified in a certain row: > Fold.Change is <= -1.5, > P.Value is < 0.05 > Count2 >= 2 > > 3) 0 if both of previous conditions are not verified > > So I have set these fllowing parameters (new objects) because I'll have to > repeat this procedure to different dataframes in which the order of columns > of interest might change (So I can change these parameters depending on the > order of the columns in any different table) > > Fold.change <- 3 #(because in this table, Fold.Change value is the third > column and so on...) > P.Value <- 4 > Count1 <- 5 > Count2 <- 6
[ Quote text] > This is my problem, I cannot use the function to recalculate values in > R-column for all rows in my dataframe. I don't understand where is the > problem, can someone help me? > Thanks a lot!! > > Francesco Francesco, I think you solve this problem with a simple way. Remember in R the most function and operations are vectorized so look this example: set.seed(123) x<-rpois(20,5) y<-rpois(20,15) z<-rpois(20,10) dta<-data.frame(x,y,z) dta dta$NEW<-ifelse(x>5 & y>15 & z>10,"UP", ifelse(x<5 & y<15 & z<10,"DOWN", "0")) dta First, I use ifelse command to simplify your nested conditional situation. Second, I know that R test this nested condition in order so the first position will result test x[1],y[1] and z[1], the second postion will result test x[2],y[2] and z[2] ... The new vector result is the same order the original data.frame so I use dta$NEW to create a new column in data.frame -- Bernardo Rangel Tura, M.D,MPH,Ph.D National Institute of Cardiology Brazil ______________________________________________ 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.