Hi everyone, i'm looking for a "NA-friendly" operator I explain : vec<-c(3,4,5,NA,1,NA,9,NA,1) vec[vec == 1] # NA 1 NA NA 1 I dont want the NA's : vec[vec == 1 & ! is.na(vec)]# 1 1 is the same as vec[vec %in% 1] # 1 1 %in% is NA-friendly :) But if i want >2 without the NA's : vec[vec>2] #3 4 5 NA NA 9 NA if i dont want the NA i have to do : vec[vec>2 & !is.na(vec)] #3 4 5 9 is there an opérator to directly do that? any idea? thx a lot. [[alternative HTML version deleted]]
Here's one option:> vec<-c(3,4,5,NA,1,NA,9,NA,1) > subset(vec, vec > 2)[1] 3 4 5 9> subset(vec, vec == 1)[1] 1 1 Sarah On Tue, Oct 30, 2012 at 5:08 PM, vincent guyader <vincent.guyader at gmail.com> wrote:> Hi everyone, > > i'm looking for a "NA-friendly" operator > > I explain : > > vec<-c(3,4,5,NA,1,NA,9,NA,1) > > vec[vec == 1] # NA 1 NA NA 1 > > I dont want the NA's : > vec[vec == 1 & ! is.na(vec)]# 1 1 > is the same as > vec[vec %in% 1] # 1 1 > > %in% is NA-friendly :) > > But if i want >2 without the NA's : > > vec[vec>2] #3 4 5 NA NA 9 NA > > if i dont want the NA i have to do : > > vec[vec>2 & !is.na(vec)] #3 4 5 9 > > is there an op?rator to directly do that? > > any idea? > > thx a lot. >-- Sarah Goslee http://www.functionaldiversity.org
On 30-10-2012, at 22:08, vincent guyader wrote:> Hi everyone, > > i'm looking for a "NA-friendly" operator > > I explain : > > vec<-c(3,4,5,NA,1,NA,9,NA,1) > > vec[vec == 1] # NA 1 NA NA 1 > > I dont want the NA's : > vec[vec == 1 & ! is.na(vec)]# 1 1 > is the same as > vec[vec %in% 1] # 1 1 > > %in% is NA-friendly :) > > But if i want >2 without the NA's : > > vec[vec>2] #3 4 5 NA NA 9 NA > > if i dont want the NA i have to do : > > vec[vec>2 & !is.na(vec)] #3 4 5 9 > > is there an op?rator to directly do that?You could define one "%>.nona%" <- function(x,y) x[x>y & !is.na(vec)] and use vec %>.nona% 2 Use ?`%in%` to see an example (in the Examples section) Berend