[R] newbie ifelse matrix question

Christine Krisky kriskyc at ohsu.edu
Mon May 2 17:13:55 CEST 2005

Hi all,
I have time series data in a matrix format 20 rows x 205 columns and have been trying to replace outliers with NA.  My first column contains the outliers threshold (3 Standard deviations) for each row  - here's a bit of the first row
   sd3      V1 V2 V3 V4         V5        V6        V7        V8        V9
1  13.03267 1797157 75 84 58  -1.958649  0.048775  2.056198  8.063622  3.071045
What I want is a statment that says if the absolute value of [,5:205]  <= column 1 keep the value, otherwise replace with NA
I've tried this without success - I do know this line works with s-plus
data1[,6:205]<-ifelse(abs(data1[,6:205])<=data1[,1],data1[,6:205], NA)
But what I get with R is only partially correct.  I get NA in places where there shouldn't be.  About every 7 columns or so I end up with 3 columns of NA and no replacement with NA where there should be (V11) in other places.  The majority of the matrix though is correct.
   sd3      V1     V2 V3 V4     V5        V6        V7        V8        V9         V10      V11	    V12  V13	V14	V15
1  13.03267 1797157 75 84 58  -1.958649  0.048775  2.056198  8.063622  3.071045  0.078468   -21.9141    NA   NA   NA  3.115585
I've tried searching the manual and user list and countless changes to the syntax over the last week, but no luck so far.
Here is my syntax and error
> data1<-read.table("testR_data",na.string="0.000000")
> dim(data1) 
[1]  20 204
# Find sd of rows, then multiply * 3
> sd_data3<-apply(data1[,5:204],1,sd,na.rm=TRUE)*3
# Attach sd_data3 to data1
> sd_and_data1<-cbind(sd_data3,data1)
# Replace values >= 3 SDs with NA
> sd_and_data1[,6:205]<-ifelse(abs(sd_and_data1[,6:205])<=sd_and_data1[,1],sd_and_data1[,6:205], NA)
Warning message: 
provided 4000 variables to replace 200 variables in: "[<-.data.frame"(`*tmp*`, , 6:205, value = list(c(-1.958649,  
I can't figure this out and would be very grateful for your help.

More information about the R-help mailing list