2014-02-27 15 views
0

選擇上多列條件的行我有一個表,如下所示:我如何R中

dput(tail(dt[,c("DSALENew","PPEGTNew","ACNew")],5)) 

structure(list(DSALENew = c(1.2, 1.54, 1.1, 12, 1.1), 
PPEGTNew = c(4, 1.2, 2.2, 1.1, 2), ACNew = c(458, 1.2, 1.5, 
1.88, 3.2)), .Names = c("DSALENew", "PPEGTNew", "ACNew"), row.names = c(139728L, 139730L, 139731L, 139732L, 139733L), class = "data.frame") 

我想只選擇那些行這對於列DSALENew和PPEGTNew 1和2之間的值。我怎樣才能做到這一點?謝謝。

+0

感謝您的所有解決方案。但讓我說我說20個這樣的columsn做過濾。如何爲20列做同樣的事情?比方說,colnames是要進行過濾的列的列表。 – Sumit

回答

1

的其他方式

`%between%`<-function(x,rng) x>rng[1] & x<rng[2] 
subset(x, DSALENew %between% c(1,2) & PPEGTNew %between% c(1,2)) 

##  DSALENew PPEGTNew ACNew 
## 139730  1.54  1.2 1.2 

但要小心,你想要什麼:>>=

如果你有幾個變量,並且只有一個條件適用於你所能做的所有變量:

## Data 
set.seed(85) 
x <- as.data.frame(matrix(round(runif(1000, min=1, max=3), 3), ncol=10)) 
## Condition applied on each column 
index <- sapply(1:ncol(x), function(i) x[, i] %between% c(1,2)) 
## For which row the condition is true for all column 
index <- apply(index, 1, all) 
x[index, ] 

##  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
## 3 1.573 1.403 1.128 1.333 1.011 1.697 1.407 1.626 1.656 1.237 
2

呼叫data.frame X

x[x$DSALENew >=1 & x$DSALENew <=2 & x$PPEGTNew >=1 & x$PPEGTNew <=2,] 
2
> library(dplyr) 
> filter(df, DSALENew > 1, DSALENew < 2, PPEGTNew > 1, PPEGTNew < 2) 
    DSALENew PPEGTNew ACNew 
1  1.54  1.2 1.2 
+0

'對於(我在1:2){ df < - df [df [,i] <2&df [,i]> 1,] } ' – Nishanth

+0

這樣的事情? ^^^ – Nishanth

+0

是的。但for循環效率非常低。 – Sumit

1

假設dat是您的數據幀。通過MRIP與subset%between%操作:

您可以使用下面的檢查

check <- rowMeans(dat[,1:2] > 1 & dat[,1:2] < 2) == 1 
dat[check,]