замените сразу несколько имен столбцов, которые заканчиваются различными шаблонами в R - PullRequest
0 голосов
/ 27 января 2020

У меня есть таблица с сотнями столбцов. Их имена оканчиваются на .a или .b. Мне нужно переименовать все columns.a сразу в columns.a_new и column.b в column-> column.b_new.

Я могу сделать это только по одному шаблону за раз, но я не знаю, как сделать это сразу для всех столбцов.

rename_at_example <- my_table %>% rename_at(vars(ends_with(".a")), 
funs(str_replace(., ".a", ".a_new")))

Есть идеи, как написать его компактно для всех столбцов? Спасибо

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Один dplyr параметр может быть:

df %>%
 rename_at(vars(matches("[ab]$")), ~ paste0(., "_new"))

   col1a_new col2a_new col1b_new col2b_new col1c col2c
1          1        11         1        11     1    11
2          2        12         2        12     2    12
3          3        13         3        13     3    13
4          4        14         4        14     4    14
5          5        15         5        15     5    15
6          6        16         6        16     6    16
7          7        17         7        17     7    17
8          8        18         8        18     8    18
9          9        19         9        19     9    19
10        10        20        10        20    10    20

Пример данных:

df <- data.frame(col1a = 1:10,
                 col2a = 11:20,
                 col1b = 1:10,
                 col2b = 11:20,
                 col1c = 1:10,
                 col2c = 11:20,
                 stringsAsFactors = FALSE)
1 голос
/ 27 января 2020

Если '.a' имена и '.b' имена не требуют одинаковой замены / действия, например, добавив _new в конец, вы можете использовать reduce2

library(tidyverse) # dplyr + purrr for reduce2

df <- data.frame(one.a = 1, one.d = 2, twoa = 3, two.b = 4, three.a = 5)
df
#   one.a one.d twoa two.b three.a
# 1     1     2    3     4       5

df %>% 
  rename_all(~ reduce2(c('\\.a$', '\\.b$'),  c('.a_new1', '.b_new2'), 
                       str_replace, .init = .x))

#   one.a_new1 one.d twoa two.b_new2 three.a_new1
# 1          1     2    3          4            5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...