从 dplyr 链中的向量重命名多列

标签 r dplyr

我有一个数据框,我想用类似的命名约定(例如,以“X”开头)和/或列位置(例如,4:7)重命名几列。列的新名称存储在向量中。如何在 dplyr 中重命名此列链?

# data
df <- tibble(RID = 1,Var1 = "A", Var2 = "B",old_name1 =4, old_name2 = 8, old_name3=20)
new_names <- c("new_name1","new_name2","new_name3")

#psuedo code
df %>%
  rename_if(starts_with('old_name'), new_names)

最佳答案

带有 rename_at 的选项将是

df %>% 
  rename_at(vars(starts_with('old_name')), ~ new_names)
# A tibble: 1 x 6
#    RID Var1  Var2  new_name1 new_name2 new_name3
#   <dbl> <chr> <chr>     <dbl>     <dbl>     <dbl>
#1  1.00 A     B          4.00      8.00      20.0

但是,可以创建一个与 rename_if 一起使用的函数。通过在列名上创建逻辑索引
df %>%
    rename_if(grepl("^old_name", names(.)), ~ new_names)
# A tibble: 1 x 6
#    RID Var1  Var2  new_name1 new_name2 new_name3
#  <dbl> <chr> <chr>     <dbl>     <dbl>     <dbl>
#1  1.00 A     B          4.00      8.00      20.0
rename_if通常是检查列的值而不是列名,即
new_names2 <- c('var1', 'var2')
df %>%
     rename_if(is.character, ~ new_names2)
# A tibble: 1 x 6
#    RID var1  var2  old_name1 old_name2 old_name3
#   <dbl> <chr> <chr>     <dbl>     <dbl>     <dbl>
#1  1.00 A     B          4.00      8.00      20.0

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

相关文章:

r - R Shiny 中盒子的高度

r - 减去多列忽略 NA

r - 矢量化 Rcpp 随机二项式绘制

R:使用 "doparallel"、 "foreach"和 "purrr"库重写循环

r - 来自 dplyr 的 bind_rows() 问题 - 包加载错误?

r - 按组变量排列grouped_df不起作用

R中的回归子集算法

r - 改变每一个可能的列组合

r - 在 tibble 中的嵌套级别之间移动 : how to refer to data stored in upper levels of nesting hierarchy

r - 将数据框中的多列与外部向量进行比较