2016-07-18 14 views
2

Das mag wie eine seltsame Frage erscheinen, aber gibt es eine Möglichkeit, einen Wert an filter() zu übergeben, der im Prinzip nichts tut?dplyrs Filterfunktion: Wie kann man jeden Wert zurückgeben (oder den Filtereffekt abbrechen)?

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

Und Sie haben den ganzen Datenrahmen cars zurück. Ich denke, dass dies in einer glänzenden Anwendung nützlich sein könnte, wo der Benutzer nur die Werte auswählen müsste, nach denen er filtern möchte; zum Beispiel könnte der Benutzer "Europa", "Afrika" oder "Amerika" wählen und hinter den Kulissen würde dieser Datenrahmen gefiltert werden und dann würde eine Tabelle mit beschreibenden Statistiken für "Europa" zurückgegeben werden (wenn der Benutzer "Europa" gewählt hat) . Was aber, wenn der Benutzer deskriptive Statistiken ohne vorherige Filterung haben möchte? Gibt es einen Wert, den wir übergeben könnten, um den Filter "Abbrechen" zu filtern und den gesamten Datenrahmen zu summarisieren()?

+3

'Geschwindigkeit == speed' –

+0

Einfach und genau das, was ich war Auf der Suche nach! Vielen Dank! – brodrigues

+5

Jeder Ausdruck, der zu "TRUE" auswertet, wird ausreichen. Ein anderes Beispiel ist 'Autos%>% Filter (TRUE)' – konvas

Antwort

3

Die Säule wird gleich selbst immer, so

cars %>% filter(speed == speed) 

wird die gesamte Datenmenge zurück.

Aktualisierung: Stellt sich heraus, dass nicht funktioniert, wenn Werte in den Daten vorhanden sind. Entschuldigung, das habe ich nicht verstanden. Also, um diese Antwort richtig zu machen, werde ich Sie drängen, mit der Empfehlung von @konvas aus den Kommentaren zu gehen.

Natürlich gibt es andere Möglichkeiten, aber ich denke, das ist das Beste.

+1

Diese Auflösung funktioniert nicht, wenn NAs in der 'Geschwindigkeit' sind. –

+0

@GregoryDemin Ups, du hast Recht. Ich werde in ein paar Stunden aktualisieren, wenn ich wieder an meinem Computer bin. Vielen Dank. –

0

Wenn Sie dies in einer glänzenden Anwendung anwenden, ist hier ein Beispiel, wie Sie nach "nichts" filtern können, wenn beispielsweise ein Benutzer "Alle" auswählt. Die kombinierte Verwendung von Klammern und ifelse effektiv ermöglicht es Ihnen, die Linie zu überspringen, wo Sie filter auf den Datensatz anwenden:

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