使用管道的优雅方式自动重命名多个列

3
我希望您能使用dplyr和管道操作来选择和重命名R中的列,以下是需要翻译的内容:

我正在寻找一种简洁优雅的方式,在R中使用dplyr和管道操作选择和重命名列。

我已经成功实现了我的想法,但它很笨拙且难以编写脚本,因此我正在寻找更好的方法。

这是有效的方法:

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

有什么更好的方法来使用管道重命名变量的脚本吗?


1
tab %>% select(...) %>% setNames(vector_of_good_var_name) 的中文翻译为:tab %>% 选择(...) %>% 设置变量名为好的向量 - undefined
是的,@r2evans!就这么简单!将其作为答案发布,我会接受它。 - undefined
1个回答

3

两个选项:

  1. dplyrtab %>% rename_(.dots = test)

    这样做的好处是使用了命名重命名,因此您的test变量内容和名称的顺序并不重要。

    这样做的缺点是rename_已经被软弃用,时间表未确定。这表明建议将转向rename_atrename_all和/或rename_if,需要一个辅助函数来在旧名称和新名称之间进行转换。

  2. Base R(重命名,仍使用dplyr管道):tab %>% select(...) %>% setNames(vector_of_good_var_name)

    我认为setNames不会很快被弃用...


1
%>% 不是基本的 R :-) - undefined
G5W:好的,你抓住我了,但是...它已经在OP环境中加载了,所以我作弊了...但是你是正确的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接