给定列名称和替换的字符向量的多个列

时间:2017-06-09 07:43:59

标签: r dplyr

虽然这很容易在setnames 0.5中使用基础R或in data.table rename_dplyr。由于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

如何在rename 0.6.0中使用rename_atdplyr执行此操作?

1 个答案:

答案 0 :(得分:11)

我不知道这是否是接近它的正确方法,但

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’