# [R] Select only rows that don't contain one number

arun smartpink111 at yahoo.com
Tue Jul 30 16:40:56 CEST 2013

```You could also use:
indx<-with(x,(1+2*(a!=-1)+4*(b!=-1)+8*(c!=-1)+16*(d!=-1)+32*(e!=-1)))
x[indx==max(indx),]
#  a b c d e
#3 2 3 3 4 3
#5 4 5 5 6 4

#Speed comparisons:
set.seed(548)
x1<- as.data.frame(matrix(sample(c(-1,1:10),5*1e6,replace=TRUE),ncol=5))

system.time({
index <- apply(x1, 1, function (x) { !(c(-1) %in% x)})
res1<-x1[index, ]
})
# user  system elapsed
# 11.252   0.028  11.304

system.time({res2<- x1[rowSums(!x1==-1)==ncol(x1),]})
# user  system elapsed
#  0.340   0.004   0.342
identical(res1,res2)
#[1] TRUE

system.time({
indx<-with(x1,(1+2*(V1!=-1)+4*(V2!=-1)+8*(V3!=-1)+16*(V4!=-1)+32*(V5!=-1)))
res3<-x1[indx==max(indx),]
})
#  user  system elapsed
#  0.268   0.008   0.274
identical(res1,res3)
#[1] TRUE
A.K.

----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: Dimitri Liakhovitski <dimitri.liakhovitski at gmail.com>
Cc: R help <r-help at r-project.org>
Sent: Tuesday, July 30, 2013 10:30 AM
Subject: Re: [R] Select only rows that don't contain one number

x[rowSums(!x<0)==ncol(x),] #if you don't want x<0
#  a b c d e
#3 2 3 3 4 3
#5 4 5 5 6 4

#or
x[rowSums(!x==-1)==ncol(x),]
#  a b c d e
#3 2 3 3 4 3
#5 4 5 5 6 4

A.K.

----- Original Message -----
From: Dimitri Liakhovitski <dimitri.liakhovitski at gmail.com>
To: r-help <r-help at r-project.org>
Cc:
Sent: Tuesday, July 30, 2013 10:06 AM
Subject: [R] Select only rows that don't contain one number

Hello!

I have a data frame:

x<-data.frame(a=c(-1,1,2,3,4),b=c(1,-1,3,4,5),c=1:5,d=2:6,e=c(1,2,3,-1,4))
x

How can I grab only those rows that don't contain any -1s (no matter in
what columns? Without writing a loop.
In other words, I want my output to contain only rows 3 and 5 of x.

Thank you very much!

[[alternative HTML version deleted]]

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help