2022-08-10 11:00:05
Сравниваем select и relocate для изменения порядка столбцов в dplyr
Большинство пользователей dplyr изменяют порядок столбцов с помощью функции select(). Этот способ является рабочим, но зачастую не самым эффективным. select() подходит для таблиц с несколькими столбцами, но если ваши данные содержат несколько десятков столбцов, то зачастую все их придётся перечислять в функции select() в нужном вам порядке. В dplyr 1.0.0 для более эффективной пересортировки порядка столбцов была добавлена функция relocate(), которая имеет два дополнительных аргумента:
● .before - позволяет указать, столбец, перед которым необходимо поставить передвигаемый столбец.
● .after - позволяет указать, столбец, после которого необходимо поставить передвигаемый столбец.
Ниже пример реализации одинаковых операций с помощью select() и relocate():
library(dplyr)
# тестовые данные
df <- tibble(a = 1, b = 1, c = 1, d = "a", e = "a", f = "a")
# расположить числовые столбцы в левой части таблицы
# перед текстовыми
select(df, where(is.numeric), where(is.character))
relocate(df, where(is.numeric), .before = where(is.character))
# преимущество relocate
# поставить стобец e, перед столбцом b
select(df, a, e, b, c, d, e, f)
relocate(df, e, .before = b)
# поставить столбец b после столбца e
select(df, a, c, d, e, b, f)
relocate(df, b, .after = e)
# переставить столбец f перед d
# и переименовать его в ff
select(df, a, b, c, ff = f, d, e)
relocate(df, ff = f, .before = d)
# передвинуть столбец d в конец таблицы
select(df, names(df)[names(df) != 'd'], d)
relocate(df, d, .after = last_col())
# передвинуть столбец d в начало таблицы
select(df, d, names(df)[names(df) != 'd'])
relocate(df, d, .before = everything())
Ссылки:
- Курс "Введение в dplyr 1.0.0", Урок 1: "Функции select(), rename_with() и relocate()"
Смотрите также:
- Функции if_all() и if_any() в dplyr
- Конструкция case_when() в dplyr
#заметки_по_R
1.5K viewsAlexey Seleznev, 08:00