[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.
-chris
More information about the R-help
mailing list