2016-07-27 17 views
3

Ich bin sehr neu in R. Ich versuche, die Spalten eines Datenrahmens auf einem anderen Datenrahmen umzubenennen.Wie kann ich alle Spalten eines Datenrahmens basierend auf einem anderen Datenrahmen in R umbenennen?

Im Wesentlichen sieht Meine Daten wie

DataFrame1

A B C D 
1 2 3 4 

Ich habe eine andere Tabelle, die wie dieser DataFrame2 sieht

Col1 Col2 
A  E 
B  Q 
C  R 
D  Z 

Ich möchte die Spalten meiner ersten Datenrahmen umbenennen basierend auf dieser Tabelle, so dass es herauskommen wird:

E Q R Z 
1 2 3 4 

Ich versuchte eine Schleife mit der Plyr-Bibliothek. Dies ist der Befehl, den ich versuchte:

library(plyr) 
for (i in names(DataFrame1[,3:336])) #renaming columns 3 to 336 
    { 
     rename(DataFrame1, 
     replace = c(i = DataFrame2[DataFrame2$Col1 == i, 2])) 
    } 

Mein Denken für jede Spalte in DataFrame1 war, benennen Sie die Spalte mit dem Look-up der Säule in DataFrame2.

Diese N Zeilen des Fehlers erzeugt „Folgende from Werte waren in x nicht vorhanden: i“, wobei n die Anzahl der Zeilen in DataFrame1 ist

Sie für jede Hilfe Danke bieten kann!

+0

Für zukünftige Referenz ist es bevorzugt für Sie, Ihre Beispieldaten in einer reproduzierbaren Weise zu teilen, wie den Code zu schreiben, um es zu erstellen oder mit 'dput' –

Antwort

5
A B C D 
1 2 3 4 

DataFrame1 <- read.table(con <- file("clipboard"), header=T) 

Col1 Col2 
A  E 
B  Q 
C  R 
D  Z 

DataFrame2 <- read.table(con <- file("clipboard"), header=T) 

colnames(DataFrame1) <- DataFrame2$Col2 

Wenn die Spaltennamen nicht in Ordnung ging, wie sie im Beispiel tun würden Sie verwenden haben match:

DataFrame2$Col2[match(names(DataFrame1),DataFrame2$Col1)] 
+0

könnte sicherer sein, sie zu" übereinstimmen "-' dat2 $ Col2 Übereinstimmung (Namen (dat1), dat2 $ Col1)] ' – thelatemail

+0

@thelatemail danke, fügte hinzu –

+1

Wow! So einfach> _ <. Danke für Ihre Hilfe! – Aserian

0

einfach können Sie die Spalten in der Basis R

umbenennen
dt1 <- data.frame(A=1, B=2, C=3, D=4) 

dt2 <- data.frame(Col1=c("A","B","C","D"),Col2=c("E","Q","R","Z")) 

names(dt1) <- dt2$Col2 

print(dt1) 

E Q R Z 
1 2 3 4 

Ersetzen und ifelse Funktion kann auch die Spaltenumzubenennen, wenn Datenrahmen gleicher Länge hat

names(dt1) <- replace(names(dt1),!is.na(names(dt1)),dt2$Col2) 
names(dt1) <- ifelse(!is.na(names(dt1)),dt2$Col2,NA) 

print(dt1) 

E Q R Z 
1 2 3 4 
Verwandte Themen