2016-12-11 3 views
0

Ich bin ein R noob! Ich versuche, einen Datenrahmen als Metadaten zu verwenden, um Spalten in einem anderen Datenrahmen zu erstellen. Ich benutze anwenden, aber die Spalten werden nicht erstellt. Ideen?In R Spalten aus einem anderen Datenrahmen hinzufügen

meta <- data.frame(colname = c("a","b","c")) 
frm <- data.frame(z=c(1,2,3)) 
frm["y"] <- 1 
colnames(frm) 
apply(meta, 1, function(x) { 
    frm[x["colname"]] <- 1 
}) 
colnames(frm) #hoping for a/b/c columns now 

Welche Ausgänge:

> meta <- data.frame(colname = c("a","b","c")) 
> frm <- data.frame(z=c(1,2,3)) 
> frm["y"] <- 1 
> colnames(frm) 
[1] "z" "y" 
> apply(meta, 1, function(x) { 
+ frm[x["colname"]] <- 1 
+ }) 
[1] 1 1 1 
> colnames(frm) #hoping for a/b/c columns now 
[1] "z" "y" 

UPDATE: fand die Antwort hier: how to access global/outer scope variable from R apply function?

Variablen benötigt außerhalb des Bereichs für den Zugriff von < < mit anwenden -

meta <- data.frame(colname = c("a","b","c")) 
frm <- data.frame(z=c(1,2,3)) 
frm["y"] <- 1 
colnames(frm) 
apply(meta, 1, function(x) { 
    frm[x["colname"]] <<- 1 #DBL ARROW DID IT 
}) 
colnames(frm) #hoping for a/b/c columns now 

Antwort

1

Die colname in ‚Meta‘ ist factor Klasse, so müssen wir dies character konvertieren und verwenden, um neue Spalte in ‚frm‘

frm[as.character(meta[[1]])] <- 1 
head(frm,2) 
# z y a b c 
#1 1 1 1 1 1 
#2 2 1 1 1 1 

Wenn wir

eine Schleife durch die ‚Meta‘ Namen müssen zu erstellen
for(cn in as.character(meta$colname)) frm[[cn]] <- 1 
+0

Dank @akrun. Ich habe es versucht, aber ich bekomme immer noch keine Spalten a/b/c. Wenn Sie das ausführen, sehen Sie Spalten a/b/c? – sisdog

+0

@sisdog Das ist seltsam. Ich bekomme die Spalten a, b, c. Aktualisiert den Beitrag – akrun

+1

Es war das Scoping in apply(), das war das Problem, denke ich. Danke nochmal für die Hilfe. – sisdog

Verwandte Themen