2017-06-09 9 views
4

これは、ベースRまたはsetnamesin data.tableまたはrename_の中でdplyr 0.5で簡単に行うことができますが、 rename_は推奨されていませんので、dplyr 0.6.0でこれを行う簡単な方法が見つかりませんでした。カラム名の文字ベクトルと置換えのある複数のカラムの名前を変更

以下は例です。私はcol.toに対応する値とcol.fromに列名を置き換えたい:

col.from <- c("wt", "hp", "vs") 
col.to <- c("foo", "bar", "baz") 

df <- mtcars 
head(df, 2) 
#>    mpg cyl disp hp drat wt qsec vs am gear carb 
#> Mazda RX4  21 6 160 110 3.9 2.620 16.46 0 1 4 4 
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 

予想される出力:

names(df)[match(col.from, names(df))] <- col.to 
head(df, 2) 
#>    mpg cyl disp bar drat foo qsec baz am gear carb 
#> Mazda RX4  21 6 160 110 3.9 2.620 16.46 0 1 4 4 
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 

どのように私はdplyr 0.6.0でrenamerename_atでこれを行うことができますか?

答えて

8

これはそれに近づくための正しい方法であるかどうかは知りませんが、

library(dplyr) 
df %>% rename_at(vars(col.from), function(x) col.to) %>% head(2) 
#    mpg cyl disp bar drat foo qsec baz am gear carb 
# Mazda RX4  21 6 160 110 3.9 2.620 16.46 0 1 4 4 
# Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 

はまた、私は将来に住んでいることに注意してください:

# packageVersion("dplyr") 
# # [1] ‘0.7.0’ 
+5

またはわずか 'DF%>%短縮rename_at(vars(col.from)、〜col.to) ' –

+0

うわー、どちらも構文が非常に単純です。唯一のことは、このような場合に 'rename_at'の動作を理解することが難しいことです。私は '.fars 'が' .vars'の各列名に適用されると考えました。私はそれが位置によって一致するとは思わなかった。 – mt1022

+1

@ mt1022うん、@docendodiscimusのものは、 '?select_all'文書で良い例になるでしょう。この関数は、選択したすべての列名に適用されます。つまり、 'function(x)'は基本的に 'x'の 'col.from'値を受け取り、それを使って処理することができます。これは私たちの場合、長さ3の異なる文字ベクトルを返すだけです。 – lukeA

関連する問題