#r #dplyr #readxl
#r #dplyr #readxl
Вопрос:
Я обновил свой, 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`)
.
Комментарии:
1. К вашему сведению, я изменил последнее предложение, потому что они называются обратными метками
Ответ №1:
..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
Комментарии:
1. Невозможно протестировать, но можно ли также использовать
backtick.. 1backtick
?!
Ответ №2:
В 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
.