2017-12-09 13 views
1

は、私は次のようなDF1と呼ばれるデータフレームを持っているとしましょう:R - 別のデータフレームの値からデータフレームの列名を変更

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 

と、このような別のデータフレームDF2:

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

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 

は、私は次のようになり、1 DFので、DF2の対応する名前にDF1の関連する列名(すなわちない年)を変更したいです

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

しかし、3行目は唯一のDF2でDF1の列と行が同じ順序になっている場合、彼らはされていない、動作しているようです:

は、私は、次の試してみました。 Rでこれを行う簡単な方法はありますか?

答えて

2

私たちは、残念ながら、これは私のために働いていないmatch

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

を使用することができます。 df2 $ nameは 'factor'型であるため、順序は維持されず、列には文字列ではなく整数値が割り当てられているようです。私はRが新しく、なぜこれが起こっているのかを実際には理解していませんが、列名はMichael、John、Sarah、Kateではなく、3,1,4,2に割り当てられています。 –

+0

@RoryDe​​vittこれは簡単な修正です。 'as.character(df2 $ ID))]'のように ' – akrun

関連する問題