使用旧select_()
函数,我可以将命名向量传递给 select 并立即更改位置和列名:
my_data <- data_frame(foo = 0:10, bar = 10:20, meh = 20:30)
my_newnames <- c("newbar" = "bar", "newfoo" = "foo")
move_stuff <- function(df, newnames) {
select_(df, .dots = newnames)
}
move_stuff(my_data, newnames = my_newnames) )
# this is the desired output
# A tibble: 4 x 2
newbar newfoo
<int> <int>
1 10 0
2 11 1
3 12 2
4 13 3
我尝试使用 quosures 和拼接做类似的事情——选择列效果很好,但向量的名称(因此同时重命名列)似乎被忽略了。以下两个都返回数据帧,其列名为bar
and foo
,但不是newbar
and newfoo
:
move_stuff2 <- function(df, newnames) {
select(df, !!!newnames)
}
# returns df with columns bar and foo
move_stuff2(my_data, quo(my_newnames))
move_stuff2(my_data, quos(my_newnames))
有没有办法使用新的 NSE 方法使用命名向量来重命名和重新排序列?