2016-08-24 4 views
5

Ich versuche, Spaltennamen programmgesteuert an eine Funktion zu übergeben, damit sie in dplyr ausgewählt werden können. Die Spaltennamen werden variieren, daher habe ich versucht, die Standard-Testversion der Auswahlfunktion select_ zu verwenden. Die Spaltennamen selbst sind ein bisschen komisch, da sie + und - Zeichen enthalten, was das Problem verursacht. Unten ist ein einfaches Beispiel, das den Fehler repliziert.Wie Übergeben von Spalte-Namen in dplyr Auswählen ohne Auswertung

library(tibble) 
library(dplyr) 
data <- data_frame(target_id = 'xyz', 
        `CH4+Sulfate-1` = 1.2, 
        `CH4+Sulfate-2` = 2, 
        `CH4+Sulfate-3` = 3) 
columns <- c('CH4+Sulfate-1', 'CH4+Sulfate-2', 'CH4+Sulfate-3') 
select_(data, .dots = columns) 

bekomme ich folgende Fehler

Error in eval(expr, envir, enclos) : object 'CH4' not found 

Was mich führt zu glauben, dass die Namen und nicht als String genommen ausgewertet werden. Wie kann ich dieses Problem umgehen, ohne die Spalten der Tabelle umbenennen zu müssen?

+1

Hmmm .... gute Frage - 'Daten [Spalten]' von Base R funktioniert in Ordnung, so ist es kein universelles Problem. Man kann es auch mit 'dplyr :: select hacken (Daten, Match (Spalten, Namen (Daten)))' aber sonst habe ich keine Ahnung. – thelatemail

+2

Ein absolut minimales Beispiel ist genug, um es zu brechen - 'dat <- data.frame (\' A + B \ '= 1: 3, check.names = FALSCH); select_ (dat, "A + B") ' – thelatemail

+0

Es scheint, als könnte' one_of' mit 'select' die Antwort in diesen [Arten von Situationen] sein (http://stackoverflow.com/questions/35839408/r-dplyr- drop-multiple-columns/35839679 # 35839679): 'select (Daten, one_of (columns))' – aosmith

Antwort

2

Das Einpacken der Namen in Backticks erledigt den Job.

columns <- c('`CH4+Sulfate-1`', '`CH4+Sulfate-2`', '`CH4+Sulfate-3`') 
Verwandte Themen