4
雖然這很容易做到與基R或setnames
in data.table
或rename_
在dplyr
0.5。由於rename_
已棄用,因此我找不到在dplyr
0.6.0中執行此操作的簡單方法。重命名多個列給出字符向量的列名和替換
下面是一個例子。我想在col.from
相應值col.to
替換列名:
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 rename
或rename_at
?
或略短'DF%>% rename_at(vars(col.from),〜col.to)' –
哇,兩者在語法上都很簡單。唯一的情況是,在這種情況下,很難讓我看到'rename_at'的行爲。我認爲'.funs'會應用於'.vars'中的每個colname。我沒有想到它會按位置匹配。 – mt1022
@ mt1022是的,@docendodiscimus中的一個將成爲'?select_all'文檔中的一個很好的例子。該功能適用於所有選定的列名稱。這意味着,'function(x)'基本上接收'x'中的'col.from'值,然後它可以做它的東西 - 這在我們的例子中只是返回一個長度爲3的不同的字符向量。 – lukeA