2016-07-18 28 views
2

這可能看起來像一個奇怪的問題,但有沒有辦法將值傳遞給filter(),基本上什麼都不做?dplyr的過濾功能:如何返回每個值(或「取消」過濾效果)?

data(cars) 
library(dplyr) 
cars %>% filter(speed==`magic_value_that_returns_cars?`) 

你會得到整個數據幀cars回來。我認爲這可以在一個閃亮的應用程序中有用,用戶只需要選擇他想要過濾的值;例如,用戶可以選擇「歐洲」,「非洲」或「美國」,在幕後數據框將被過濾,然後將返回具有「歐洲」描述性統計數據的表格(如果用戶選擇「歐洲」) 。但是如果用戶想要沒有第一次過濾的描述性統計信息呢?是否有一個值可以用來過濾«取消»過濾器並傳遞整個數據幀以彙總()?

+3

'速度== speed' –

+0

簡單,正是我一直在尋找!謝謝! – brodrigues

+5

任何評估爲「TRUE」的表達式都可以。另一個例子是'cars%>%filter(TRUE)' – konvas

回答

3

列將總是等於本身,因此

cars %>% filter(speed == speed) 

將返回完整的數據集。

更新:原來,當數據中有NA值時,這將不起作用。對不起,我錯過了。所以,爲了使這個答案正確,我會敦促你從評論中引用@konvas的建議。

cars %>% filter(TRUE) 

當然還有其他方法,但我認爲這是最好的。

+1

如果在速度中有NA,那麼這種靈魂不適用。 –

+0

@GregoryDe​​min哎呀,你說得對。我將在幾個小時後更新我的電腦。謝謝。 –

0

如果你在一個閃亮的應用程序中應用這個,下面是一個例子,說明如果用戶選擇「全部」,你可以通過「無」過濾。結合使用大括號和ifelse將有效地讓你跳過您應用filter到數據集行:

x <- "All" 
 

 
cars %>% 
 
    {if(x!="All") filter(.,speed==x) else .} %>% 
 
    head() 
 

 
# speed dist 
 
# 1  4 2 
 
# 2  4 10 
 
# 3  7 4 
 
# 4  7 22 
 
# 5  8 16 
 
# 6  9 10 
 

 
# No data is filtered 
 

 
x <- 7 
 

 
cars %>% 
 
{if(x!="All") filter(.,speed==x) else .} %>% 
 
    head() 
 

 
# speed dist 
 
# 1  7 4 
 
# 2  7 22 
 

 
# The data is filtered by x==7