2016-04-06 11 views
0

Ich habe eine SQLDF-Anweisung, die auf einen Datenrahmen verweist, aber ich möchte auch, dass er auf einen Vektor verweist, der nicht Teil des Datenrahmens ist, wie unten gezeigt.Referenzieren eines Vektors in einer R sqldf-Anweisung

sqldf("select count(*) from carddata where new_user_indicator == 'Y' & loyalty_threshold > average_loyalty_threshold") 

average_loyalty_threshold ist ein Stand-alone-Vektor, der separat berechnet wird, und ist ein Teil des Datenrahmens nicht.

Wie kann ich den eigenständigen Vektor in einer sqldf where-Klausel referenzieren?

Danke

+0

Bitte erläutern Sie, was Sie wollen, indem Sie ein reproduzierbares Beispiel mit allen Eingaben und Bibliotheksanweisungen und der erwarteten Ausgabe bereitstellen. –

Antwort

1

Ihre Daten etwas sieht wie folgt aus der Annahme:

library(sqldf) 

carddata = data.frame(new_user_indicator = c('N','N','Y','Y','Y'), 
         loyalty_threshold = c(1,1,5,3,1)) 

Und Ihr Ziel ist, einen anderen Vektor mit einem einzelnen Wert zu verwenden, um alle Einheiten von carddata deren Loyalität Schwelle über diesem Wert auswählen , erhalten Sie folgende verwenden:

# create a dataframe from average_loyalty_threshold so that sqldf will see it as a table 
average_loyalty_threshold = data.frame(threshold = 2) 

sqldf("select count(*) 
     from carddata 
     where new_user_indicator == 'Y' 
     and loyalty_threshold > (select * from average_loyalty_threshold)") 

#returns 

    count(*) 
1  2 

Mit dem (select * from average_loyalty_threshold) Sie auswählen können, dass einzelne Wert, den Sie looki sind ng für.

Allerdings ist es einfacher Art und Weise:

average_loyalty_threshold = 2 

fn$sqldf("select count(*) 
    from carddata 
    where new_user_indicator == 'Y' 
    and loyalty_threshold > `average_loyalty_threshold`") 

#returns 

    count(*) 
1  2 

Hier habe ich den Wert der Treue Schwelle überschritten direkt in die Abfrage.

Sie könnten auch sprintf() für diesen Text einfügen, aber wie andere in den Kommentar hingewiesen, fn$ ist die empfohlene Möglichkeit, externe Variablen zu verweisen.

+0

Der normale Weg für die Textersetzung mit sqldf ist die Verwendung von 'fn $'. Siehe '? Fn' und die Beispiele auf der sqldf-Homepage: https://github.com/ggrothendieck/sqldf –

+0

Hi @ niczky12, ich kannte sprintf nicht im Kontext von R. Ich habe diesen Artikel gefunden: http: //rfunction.com/archives/2279 das zeigt ein anderes großartiges Beispiel. Ich werde auch fn $ checken. Danke an alle. – Jazzmine

+0

@ G.Grothiedieck Danke für den Tipp. Die Methode 'fn $' gibt jedoch einen Fehler bei Variablennamen mit Unterstrichen aus. Ich denke, das ist immer noch ein work in progress. Sprintf scheint stabiler zu sein. – niczky12