2015-04-19 19 views
5

Die Frage ist ziemlich einfach, aber ich konnte keine Lösung finden.R: Definieren Sie den Spaltennamen mit Einfügen()

Ich möchte einen neuen Datenrahmen erstellen, der den Namen der Spalte mit paste0 definiert.

Idealerweise würde ich gerne so etwas machen (was nicht funktioniert).

mydataframe <- data.frame(id = 1, 
          paste0('Here_','my_','column_','name') = 'foo') 
# Error: unexpected '=' in: 
# "mydataframe <- data.frame(id = 1, 
#       paste0('Here_','my_','column_','name') =" 

Auch warum funktioniert nicht?

+0

Es ist nicht ganz klar ist, was Sie zu tun versuchen. Ist dieses Beispiel ein einzelner Datenrahmen mit einer einzelnen Variablen, die einen einzelnen Wert enthält? –

+2

@BrianP Ich denke, was er will, ist in der Lage, den Namen dynamisch zu spezifizieren, der mit dem Spaltenvektor ''foo'' verbunden ist, also wäre das Ergebnis äquivalent zur manuellen Eingabe von' data.frame (id = 1, Here_my_column_name =' foo ")". – nrussell

+1

Ahhh, macht Sinn! Danke für die Klärung –

Antwort

4

Data.frame ist eine Funktion und nimmt daher Argumente. Diese Argumente können keine anderen Funktionen sein. Zum Beispiel könnten Sie keine Funktion wie fn <- function(paste0('Hi_', 'how_are_you') = x) { x } definieren. R funktioniert einfach nicht so.

Sie können jedoch nach wie vor dynamisch Ihre Spaltennamen nach der Tatsache ändern:

df <- data.frame(1, 'foo') 
names(df) <- c('id', paste0('Here_','my_','column_','name')) 

das tun sollten, was Sie wollen.

Bonus: Sie können Ihre einfügen wie folgt vereinfachen: paste('Here', 'my', 'column', 'name', sep = '_').

0

Sie können

df[, paste('Here', 'my', 'column', 'name', sep = '_')] <- 'foo' 

tun es unmöglich ist, es zu tun, wie Sie vorschlagen, weil keine Variable ausgewertet wird, ist es genau nur das bekommt, was Sie schreiben und versuchen, es als für die Spaltennamen zu verwenden. Auf diese Weise wird paste('Here', 'my', 'column', 'name', sep = '_') ausgewertet und die zurückgegebene Zeichenfolge wird tatsächlich als Name für die Spalte verwendet.

0

brauchte ich einige Zeit, gleiche vor und löste das Problem mit Innen Paste-Funktion alle den Befehl setzt mit Auswertung folgenden

i=3 
mydf <- eval(parse(text = paste0(
    "data.frame(id =", 1, ", my_col", i, "=", 55, ")"))) 
Verwandte Themen