Дополнительно
Отбрасывание столбцов рамки данных по имени
У меня есть несколько столбцов, которые я хотел бы удалить из фрейма данных. Я знаю, что мы можем удалить их по отдельности, используя что-то вроде:
df$x <- NULL
Но я надеялся сделать это с помощью меньшего количества команд.
Кроме того, я знаю, что могу отбрасывать столбцы, используя целочисленное индексирование, как это:
df <- df[ -c(1, 3:6, 12) ]
Но меня беспокоит, что относительное положение моих переменных может измениться.
Учитывая, насколько мощным является R, я подумал, что может быть лучший способ, чем отбрасывать каждый столбец по одному.
799
19
Вы можете использовать простой список имен:
Существует также команда
subset
, полезная, если вы знаете, какие столбцы вам нужны:вероятно, проще всего, или для нескольких переменных:
Или если вы имеете дело с
data.table
(согласно https://stackoverflow.com/q/9202413):или для нескольких переменных
Вы можете использовать
%in%
следующим образом:список(нуль) также работает:
Если вы хотите удалить столбцы по ссылке и избежать внутреннего копирования, связанные с данными.кадров то можно использовать данные.пакет стол
и функции
:=`Вы можете передать имена персонажей вектора в левой части
: оператора=
инуль
, а РГО.Есть потенциально более мощная стратегия, основанная на том, что команда grep() возвращает числовой вектор. Если у вас есть длинный список переменных, как это делаю я в одном из моих наборов данных, некоторые переменные, которые заканчиваются в ".А" и другие, которые заканчиваются в ".Б" и вы только хотите те, которые заканчиваются в ".А" (вместе со всеми переменными, которые Дон'т соответствовать либо рисунок, сделайте следующее:
Другой
dplyr
ответ. Если ваши переменные имеют некоторые общие структуры именования, вы могли бы попробоватьstarts_with()
. НапримерИз интереса, этот флагов одним из R's странно несколько синтаксических несоответствий. Например, учитывая двух столбцов фрейма данных:
Еще одна возможность:
Решение Dplyr
Я сомневаюсь, что это будет получить много внимания, но если у вас есть список столбцов, которые вы хотите удалить, и вы хотите сделать это в
dplyr
цепи я использую one_of()в
выберите` статья:Вот простой, репродуктивно пример:
Вот это
dplyr
способ пойти об этом:Мне нравится это, потому что это'с интуитивно понятным для чтения &ампер; разобраться без аннотации и крепкими колоннами менять положение в пределах фрейма данных. Он также вытекает из векторной идиома, используя
-
, чтобы удалить элементы.Я продолжаю думать, что там должен быть лучший идиома, но для вычитания столбцы по имени, я, как правило, выполните следующие действия:
Там's в функцию, называемую
dropNamed () в Бернд Bischl'пакет S
BBmisc`, который делает именно это.Преимущество в том, что он избегает повторения аргумента фрейма данных и, таким образом, подходит для трубопроводов в magrittr
(как
dplyr` подходы):Другое решение, если вы не'т хотите использовать @Хэдли's выше: если ты такой "аргумент" это имя столбца, который вы хотите удалить:
За
выберите(-one_of(drop_col_names)) показали в предыдущих ответах, есть несколько других
dplyrвариантов для удаления столбцов с помощью функции Select ()
, которые не связаны с определением все конкретные имена столбцов (с помощью dplyr Звездные войны выборки данных по какому разнообразие в имена столбцов):Предоставить фрейм данных и через запятую имена удалить:
Найти индекс колонки вы хотите удалить, используя
что
. Дайте эти показатели с отрицательным знаком (*-1
). Тогда подмножество тех значений, которые будет удалить их из таблицы данных. Это пример.