2014-10-19 34 views
0

我想使用'dplyr'包來返回數據框中包含任何列中的一些數字或字符值的行。例如,如何使用dplyr中的過濾器在不使用'|'的情況下在多列中查找值

> set.seed(1) 
> mydf <- data.frame(matrix(abs(round(rnorm(200), 1)), nrow = 20)) 
> mydf 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 0.6 0.9 0.2 2.4 0.6 0.6 0.5 1.9 0.4 1.2 
2 0.2 0.8 0.3 0.0 0.1 0.0 1.3 1.2 0.2 1.0 
3 0.8 0.1 0.7 0.7 1.2 0.9 0.2 1.7 1.1 0.2 
4 1.6 2.0 0.6 0.0 1.5 0.2 0.2 0.5 0.9 1.5 
5 0.3 0.6 0.7 0.7 0.6 0.7 0.1 1.1 0.6 0.5 
6 0.8 0.1 0.7 0.2 0.3 1.8 0.7 0.8 2.2 0.2 
7 0.5 0.2 0.4 1.8 1.1 0.7 0.1 2.1 0.3 1.5 
8 0.7 1.5 0.8 1.5 0.3 0.9 0.0 0.0 1.4 0.8 
9 0.6 0.5 0.1 0.2 0.4 0.4 0.7 1.3 0.1 0.4 
10 0.3 0.4 0.9 2.2 0.3 1.7 0.3 1.6 0.2 0.9 
11 1.5 1.4 0.4 0.5 0.5 0.6 0.1 0.5 2.3 0.2 
12 0.4 0.1 0.6 0.7 1.2 0.5 0.6 0.0 0.1 0.4 
13 0.6 0.4 0.3 0.6 1.2 1.4 0.5 0.3 0.5 0.7 
14 2.2 0.1 1.1 0.9 0.7 0.7 1.5 0.9 0.1 0.8 
15 1.1 1.4 1.4 1.3 1.6 0.2 0.3 1.5 0.3 1.2 
16 0.0 0.4 2.0 0.3 0.6 0.4 1.5 1.1 0.0 1.0 
17 0.0 0.4 0.4 0.4 1.3 0.3 0.3 1.0 0.8 1.4 
18 0.9 0.1 1.0 0.0 0.6 0.3 0.5 0.6 2.1 1.0 
19 0.8 1.1 0.6 0.1 1.2 0.5 0.7 1.4 1.0 0.4 
20 0.6 0.8 0.1 0.6 0.5 0.2 0.1 1.9 1.2 0.4 

雖然我可以過濾的行上的單個列條件如

> mydf %>% filter(X1 %in% c(1.5, 0.2)) 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 0.2 0.8 0.3 0.0 0.1 0.0 1.3 1.2 0.2 1.0 
2 1.5 1.4 0.4 0.5 0.5 0.6 0.1 0.5 2.3 0.2 

> mydf %>% filter(X2 %in% c(1.5, 0.2)) 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 0.5 0.2 0.4 1.8 1.1 0.7 0.1 2.1 0.3 1.5 
2 0.7 1.5 0.8 1.5 0.3 0.9 0.0 0.0 1.4 0.8 

我想篩選基於數據中的所有列的行,而無需使用「|」如下。

> mydf %>% filter(X1 %in% c(1.5, 0.2) | X2 %in% c(1.5, 0.2) | ...) 
+0

你的意思是像'是myDF [rowSums(sapply( mydf,'%in%',c(1.5,0.2)))> 0,]'? – A5C1D2H2I1M1N2O1R2T1 2014-10-20 06:54:36

+0

應該在'%in%'附近反引號。 – A5C1D2H2I1M1N2O1R2T1 2014-10-20 06:55:44

回答

0

如果我理解正確的話,你可以用rowSums基礎R和%in%做到這一點,而不是裝包,像這樣的:

> mydf[rowSums(sapply(mydf, `%in%`, c(1.5, 0.2))) > 0, ] 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 
1 0.6 0.9 0.2 2.4 0.6 0.6 0.5 1.9 0.4 1.2 
2 0.2 0.8 0.3 0.0 0.1 0.0 1.3 1.2 0.2 1.0 
3 0.8 0.1 0.7 0.7 1.2 0.9 0.2 1.7 1.1 0.2 
4 1.6 2.0 0.6 0.0 1.5 0.2 0.2 0.5 0.9 1.5 
6 0.8 0.1 0.7 0.2 0.3 1.8 0.7 0.8 2.2 0.2 
7 0.5 0.2 0.4 1.8 1.1 0.7 0.1 2.1 0.3 1.5 
8 0.7 1.5 0.8 1.5 0.3 0.9 0.0 0.0 1.4 0.8 
9 0.6 0.5 0.1 0.2 0.4 0.4 0.7 1.3 0.1 0.4 
10 0.3 0.4 0.9 2.2 0.3 1.7 0.3 1.6 0.2 0.9 
11 1.5 1.4 0.4 0.5 0.5 0.6 0.1 0.5 2.3 0.2 
14 2.2 0.1 1.1 0.9 0.7 0.7 1.5 0.9 0.1 0.8 
15 1.1 1.4 1.4 1.3 1.6 0.2 0.3 1.5 0.3 1.2 
16 0.0 0.4 2.0 0.3 0.6 0.4 1.5 1.1 0.0 1.0 
20 0.6 0.8 0.1 0.6 0.5 0.2 0.1 1.9 1.2 0.4 
相關問題