【发布时间】:2017-09-15 23:57:00
【问题描述】:
我正在寻找一种简短而优雅的方式来使用 dplyr 和管道在 R 中选择和重命名列。
我已经成功地做我想做的事,但它笨拙且难以编写脚本,所以我正在寻找更好的方法。
这是有效的:
tab <- as.data.frame(matrix(round(runif(15,0,50)),3,5))
colnames(tab) <- c("badvar1", "badvar2","badname1","badname2","badname3")
tab %>%
select(c("badname1","badname2","badname3")) %>%
rename(goodname1 = badname1, goodname2 = badname2 ,goodname3 = badname3)
goodname1 goodname2 goodname3
1 48 32 28
2 38 31 5
3 19 43 41
这里的问题是我有超过 3 个变量要重命名(想象 50 个),所以我不想手动写 50 次 newvar1=var1, newvar2=var2, ...。所以我一直在寻找下一个脚本的精神,但它不起作用:
vector_of_good_var_name <- c("goodname1","goodname2","goodname3")
tab %>%
select(c("badname1","badname2","badname3")) %>%
rename(vector_of_good_var_name)
Error: All arguments must be named
我也尝试过这个(非常不优雅,无论如何也没有用......):
test <- list("badname1","badname2","badname3")
names(test) <- c("goodname1","goodname2","goodname3")
tab %>%
select(c("badname1","badname2","badname3")) %>%
rename(test)
Error: All arguments must be named
知道如何使用管道更好地脚本重命名变量吗?
【问题讨论】:
-
tab %>% select(...) %>% setNames(vector_of_good_var_name)? -
是的@r2evans!就这么简单!发布它作为答案,我会接受它。