如何使用RENAME_WITH或RENAME用字符串向量重命名数据帧的最后n列? [英] How to rename last n columns of dataframe with vector of strings, using rename_with or rename?

查看:16
本文介绍了如何使用RENAME_WITH或RENAME用字符串向量重命名数据帧的最后n列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是rename_at,但由于它已被取代,因此我需要找到一种方法,使用rename_with()或rename()重命名具有某些字符串向量的最后n列

library(tidyverse)

df <- tibble(
  a = 1:10,
  b = 1:10,
  c = 1:10,
  d = 1:10,
  e = 1:10
)

new_names <- c("1", "2", "4", "5", "10")

df %>% 
  rename_at(vars(names(.) %>% tail(5)), funs(paste0("", new_names))) # only `funs(new_names)` won't work

推荐答案

使用rename_with

library(dplyr)
library(stringr)
df %>% 
    rename_with(~ str_c(., new_names), tail(names(.), 5))
# A tibble: 10 x 5
#      a1    b2    c4    d5   e10
#   <int> <int> <int> <int> <int>
# 1     1     1     1     1     1
# 2     2     2     2     2     2
# 3     3     3     3     3     3
# 4     4     4     4     4     4
# 5     5     5     5     5     5
# 6     6     6     6     6     6
# 7     7     7     7     7     7
# 8     8     8     8     8     8
# 9     9     9     9     9     9
#10    10    10    10    10    10

rename

df %>% 
     rename(!!! setNames(tail(names(.), 5), new_names))

或直接在namestail上使用rename_at

df %>% 
      rename_at(vars(tail(names(.), 5)), ~ str_c(., new_names))

-输出

# A tibble: 10 x 5
#      a1    b2    c4    d5   e10
#   <int> <int> <int> <int> <int>
# 1     1     1     1     1     1
# 2     2     2     2     2     2
# 3     3     3     3     3     3
# 4     4     4     4     4     4
# 5     5     5     5     5     5
# 6     6     6     6     6     6
# 7     7     7     7     7     7
# 8     8     8     8     8     8
# 9     9     9     9     9     9
#10    10    10    10    10    10

如果只是替换名称

df %>% 
    rename_at(vars(tail(names(.), 5)), ~ new_names)
# A tibble: 10 x 5
#     `1`   `2`   `4`   `5`  `10`
#   <int> <int> <int> <int> <int>
# 1     1     1     1     1     1
# 2     2     2     2     2     2
# 3     3     3     3     3     3
# 4     4     4     4     4     4
# 5     5     5     5     5     5
# 6     6     6     6     6     6
# 7     7     7     7     7     7
# 8     8     8     8     8     8
# 9     9     9     9     9     9
#10    10    10    10    10    10

在该示例中,只有5列。假设只有最后3列

df %>%
   rename_at(vars(tail(names(.), 3)), ~ str_c(., tail(new_names, 3)))

funs接受一个函数,因此用paste0as.character包装可以做到这一点,而不仅仅是输入向量

这篇关于如何使用RENAME_WITH或RENAME用字符串向量重命名数据帧的最后n列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆