在 dplyr 链中动态重命名列名

标签 r dplyr rename

<分区>

举个例子

temp <- mtcars
colnames(temp)[grepl("ge", colnames(temp))] <- "garbage"

输出

                     mpg cyl  disp  hp drat    wt  qsec vs am garbage carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1       4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1       4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1       4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0       3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0       3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0       3    1

我只知道列名以 ("ge") 开头,但不确定列名是否准确

我想要一个在 dplyr 链中工作的解决方案

temp %>%
   rename(vars(starts_with("ge")), "garbage")
Error: All arguments must be named

当然不行。感谢您的帮助

最佳答案

您可以使用rename_at。如果您知道只有一列以“ge”开头,这将起作用:

library(dplyr)
mtcars %>% 
  rename_at(vars(starts_with("ge")), funs(paste0("garbage")))

如果要重命名多个列,funs() 中的函数需要返回一个名称向量,或者执行类似gsub() 的操作来添加现有列名的一些内容。

关于在 dplyr 链中动态重命名列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46289997/

相关文章:

r - 如何在 R 中创建一个数据框,当其他列之一发生更改时自动更新列?

r - 如何更改 ggplot2 中的默认字体大小 - 包括 geom_text

基于几个变量的排名

r - 如何使用 purrr 中的 map 和 dplyr::mutate 根据列对创建多个新列

Python:用渐进式数字重命名列表中的重复项而不对列表进行排序

r - 根据变量的值将值从一个数据帧移动到另一个数据帧

r - 使用 ggplot2 复制食物可视化的节奏

python - 等效于 Python pandas 中的 'mutate_at' dplyr 函数

sql - Oracle - 删除表约束而不删除表

mysql - 在 MySQL 中重命名表的列名