2012-03-25 7 views
23

raw von String-Spalten erhalten, ist ein data.table und der folgende Code funktioniert:von data.table

raw[,r_responseTime] #Returns the whole column 
raw[,c_filesetSize] #Same as above, returns column 
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something 

nun diese Spalten aus einer Zeichenfolge angeben Ich möchte, so zum Beispiel:

col1="r_reponseTime" 
col2="c_filesetSize" 

Wie erreiche ich jetzt dasselbe wie oben, während ich die Spalten durch die Zeichenkette referenziere?

raw[,col1] #Returns the whole column 
raw[,col2] #Same as above, returns column 
plot(raw[,col1]~raw[,col2]) #draws something 

nicht funktioniert, natürlich, weil ich eine Art „dereferencation“ benötigen. Ich wusste nicht, was ich in der Hilfe und im Internet suchen sollte, also tut mir die dumme Frage leid.

+2

Zusätzlich zu den Antworten verwenden, versuchen Sie 'mit = false'. Siehe auch FAQs 1.5, 1.6 und 1.7. –

+0

'mit = FALSE' scheint nicht mit dem' by' Argument zu funktionieren, keine Lösung dafür? – tlamadon

+0

Nun, tatsächlich, ein Vektor von Strings funktioniert out of the Box in der 'by' Argument. – tlamadon

Antwort

26

Es wäre nett, wenn Sie ein reproduzierbares Beispiel geliefert hätten oder zumindest gezeigt hätten, was die Spaltennamen raw sind und was r_responseTime und c_filesetSize enthalten. Nachdem dies gesagt ist, get ist Ihre Funktion für dereferencing so geben diese einen Versuch:

raw[, get(col1)] 
raw[, get(col2)] 
plot(raw[, get(col1)] ~ raw[, get(col2)]) 
+0

Danke, genau das, was ich gesucht habe! – theomega

+0

Wie kann ich 'get' verwenden, wenn ich 2 Spaltennamen als Zeichenfolgen habe? Tut mir leid, eigentlich 'mit = FALSCH 'macht den Trick ... – tlamadon

+0

Standardbasis R' [['' ist vielleicht einfacher für einzelne Spaltenauswahlen, wenn der Spaltenname oder die Nummer in 'col1' gehalten wird:' rohe [[col1]] ' . –

7

Eine Alternative ist die match() Funktion oder %in% Operator zu verwenden.

raw[, match(col1, names(raw)),with=FALSE] 
+2

Spiel ist nett. Ich brauchte 'mit = FALSE' wie in:' rohe [, Übereinstimmung (col1, Namen (roh)), mit = FALSE] ' – dardisco

+0

Danke !! Das ist einfach perfekt für mich –

2

Wenn Sie einen Vektor von Strings haben, können Sie mget

cols = c("r_reponseTime", "c_filesetSize") 
raw[, mget(cols)]