[R] newbie ifelse matrix question

Dimitris Rizopoulos
Mon, 02 May 2005 15:54:54 -0000

try something like this:

dat <- matrix(rnorm(20*205), 20, 205)
sds <- sd(t(dat))
######
dat[, 6:205][abs(dat[, 6:205]) > sds] <- NA


Best,
Dimitris

----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven

Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/16/336899
Fax: +32/16/337015
Web: http://www.med.kuleuven.ac.be/biostat/
     http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm


----- Original Message -----
From: "Christine Krisky" <kriskyc at ohsu.edu>
To: <r-help at stat.math.ethz.ch>
Sent: Monday, May 02, 2005 5:13 PM
Subject: [R] newbie ifelse matrix question


> 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
> ow  - 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
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>