2016-07-27 9 views
3

私はRに非常に新しいです。私は別のデータフレームに基づいてデータフレームの列の名前を変更しようとしています。Rの別のデータフレームに基づいてデータフレームのすべての列の名前を変更するにはどうすればよいですか?

私は私が私の最初のデータフレームの列の名前を変更したいこの DataFrame2

Col1 Col2 
A  E 
B  Q 
C  R 
D  Z 

のように見える別のテーブルを持っている

A B C D 
1 2 3 4 

DataFrame1

のように基本的に私のデータが見えますこのテーブルに基づいて、それが出てくるように:

E Q R Z 
1 2 3 4 

私はplyrライブラリを使ってループを試みていました。これは私が試したコマンドです:

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

私の思考がDataFrame2内の列の検索と列の名前を変更、DataFrame1の各列のためでした。

これはエラーのn行を生成し、「次from値がxには存在しなかった:私は」、nは

DataFrame1

に存在する行数であるあなたが提供することができます任意の助けをありがとう!

+0

今後参考にするために、コードを記述して作成するか、 'dput'を使ってサンプルデータを再現性のある方法で共有することをお勧めします。 –

答えて

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 

彼らはあなたがmatchを使用する必要があると思います例で行うように列名が順番に行かなかった場合:

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

お互いに「マッチさせる」方が安全かもしれません - dat2 $ Col2 [一致(名前(dat1)、dat2 $ Col1)] ' – thelatemail

+0

@thelatemailありがとう、それを追加しました –

+1

うわー!とても簡単> _ <。ご協力ありがとうございました! – Aserian

0

単にあなたがベースR

の列の名前を変更することができます
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 

データフレームの長さが同じであれば、置換およびifelse関数による列名の変更も可能

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 
関連する問題