2017-07-10 7 views
0

Ich bin ganz neu in R und verwendet eine Menge von Stackoverflow viele Probleme in der Vergangenheit zu lösen suchen, konnte aber keine Lösung für ein aktuelles Problem finden:R - Ersetzen Spalten Datenrahmen basierend auf Spaltennamen

Ich möchte die Spalten eines leeren Datenrahmens durch Spalten eines anderen Datenrahmens ersetzen, der Messdaten basierend auf übereinstimmenden Spaltennamen enthält. Um das Problem zu veranschaulichen, hier einige Beispieldaten:

#sample data 
set.seed (543) 
input <- data.frame(replicate(6,sample(0:100,20,rep=TRUE))) 
colnames(input) <- c("Time", "C2", "B1", "A1","A2", "A3") #no specific order predictable here 

#create empty data frame 
test <- data.frame(matrix(0, ncol = 10, nrow = nrow(input))) 
colnames(test) <- c("Time", "A1", "B1", "C1","A2", "B2", "C2","A3", "B3", "C3") 

I angewandt, um die match Funktion des Spaltenname-Lookup

#match column names and generate index vector 
matching <- match(colnames(test),colnames(input)) 
#remove NA from vector 
matching <- matching[!is.na(matching)] 

zu tun, aber wenn ich einfach die Messungen Datenrahmen in die leeren kopieren Sie mit der Indexvektor

test[,matching] <- input[,1:ncol(input)] 

R immer den leeren ‚Test‘ Datenrahmen von ‚links nach rechts‘, unabhängig von der Reihenfolge, in dem ‚passenden‘ Vektor spezifizierte füllt. Ich möchte einen 'Test'-Datenrahmen erhalten, in dem Spalten, die nicht im' Eingabe'-Datenrahmen vorhanden sind, immer noch mit Nullen gefüllt sind. Irgendwelche Ideen? Danke im Voraus!

Antwort

0

Sehen Sie sich Ihre Werte für den Abgleich, geht alles, wie es sollte, man muss nur die Parameter für Spiel invertiert :)

Dies funktioniert:

matching <- match(colnames(input),colnames(test)) 

Beachten Sie, dass Sie mit so viel einfacher machen kann :

test[,names(input)] <- input 
Verwandte Themen