2017-12-09 5 views
1

Lets sagen, dass ich einen Datenrahmen df1 ähnlich wie die folgenden genannt haben:R - Ändern Datenrahmen Spaltennamen von Werten in einem anderen Datenrahmen

Year S4 S1 S2 S3 
1 2001 2 5 4 4 
2 2002 5 2 2 0 
3 2003 7 9 3 6 
4 2004 9 6 8 7 
5 2005 2 2 6 4 
6 2006 10 5 7 5 

und eine andere Datenrahmen df2 wie folgt aus:

ID Name 
1 S1 John 
2 S2 Sarah 
3 S3 Kate 
4 S4 Michael 

und ich mag die entsprechenden Spaltennamen ändern (dh nicht das Jahr) von DF1 zu den entsprechenden Namen in df2, so dass df 1 würde wie folgt aussehen:

Year Michael John Sarah Kate 
1 2001  2 5  4 4 
2 2002  5 2  2 0 
3 2003  7 9  3 6 
4 2004  9 6  8 7 
5 2005  2 2  6 4 
6 2006  10 5  7 5 

Ich habe folgendes versucht:

cols <- names(df1) 
cols <- cols[2:length(cols)] 
newCols = df2[cols == df2$ID, "Name"] 
names(df1) <- c("Year", newCols) 

Aber die dritte Zeile erscheint nur, wenn die Spalten in DF1 und Reihen in der gleichen Reihenfolge in df2 zu arbeiten sind, was sie nicht sind. Gibt es eine einfache Möglichkeit, dies in R zu tun?

Antwort

2

Wir match

names(df1)[-1] <- df2$Name[match(names(df1)[-1], df2$ID)] 
+0

verwenden Leider dies für mich nicht funktioniert. Es scheint, weil df2 $ name vom Typ 'factor' ist, die Reihenfolge nicht eingehalten wird und auch die Spalten den Integer-Werten und nicht den Strings zugewiesen werden. Ich bin neu bei R und verstehe nicht wirklich, warum das passiert, aber die Spaltennamen sind 3, 1, 4, 2 und nicht Michael, John, Sarah, Kate. –

+0

@RoryDevitt Das ist eine einfache Lösung. 'as.character (df2 $ Name [Übereinstimmung (Namen (df1) [- 1], as.Zeichen (df2 $ ID))]' – akrun

Verwandte Themen