Переименование не работает для имен столбцов, начинающихся с двух точек - PullRequest
1 голос
/ 14 марта 2019

Я обновил tidyverse, и моя read_excel() функция (с readxl) также изменилась. Столбцы без заголовков теперь называются ..1, ..2 и т. Д., Когда они назывались X__1, X__2.

Я пытаюсь rename() эти столбцы, начиная с двух точек, но я получаю сообщение об ошибке.

Вот пример:

library(tidyverse)

df <- tibble(a = 1:3,
             ..1 = 4:6)

df <- df %>% 
  rename(b = ..1)

Выдает ошибку:

Error in .f(.x[[i]], ...) : 
  ..1 used in an incorrect context, no ... to look in

Я получаю ту же ошибку, если использую обратные ноты вокруг имени: rename(b = `..1`).

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Пакет janitor имеет очень удобную функцию clean_names для подобных задач.В этом случае он заменяет любой .., полученный из readxl, на x.Я добавил еще один столбец .., чтобы показать, как работает замена.

library(tidyverse)

df <- tibble(a = 1:3,
             ..1 = 4:6,
             ..5 = 10:12)

df %>% 
  janitor::clean_names()
#> # A tibble: 3 x 3
#>       a    x1    x5
#>   <int> <int> <int>
#> 1     1     4    10
#> 2     2     5    11
#> 3     3     6    12

Кажется, что настройка именования в readxl является предметом дискуссии: см. эту проблему, средидругие о лучшем способе конвертировать непригодные имена из листов Excel.На ней также есть виньетка .Если честно, последние пару раз мне нужно было связываться с readxl именами, я просто передал фрейм данных в janitor.

2 голосов
/ 14 марта 2019

..1 является зарезервированным словом в R. См. help("reserved") и help("..1"). Попробуйте процитировать это:

df %>% rename(b = "..1")

дает:

# A tibble: 3 x 2
      a     b
  <int> <int>
1     1     4
2     2     5
3     3     6
...