Кто-нибудь знает, как удалить весь столбец из data.frame в R? Например, если мне дают эти data.frame:
> head(data)
chr genome region
1 chr1 hg19_refGene CDS
2 chr1 hg19_refGene exon
3 chr1 hg19_refGene CDS
4 chr1 hg19_refGene exon
5 chr1 hg19_refGene CDS
6 chr1 hg19_refGene exon
и я хочу удалить 2-й столбец.
Ответы:
Вы можете установить его на
NULL
.Как указано в комментариях, вот еще несколько возможностей:
Вы можете удалить несколько столбцов с помощью:
Будьте осторожны с подмножеством матриц, поскольку вы можете получить вектор:
источник
Data[-2]
не нуждается вdrop
аргументе, потому что он всегда возвращаетсяdata.frame
изdata.frame
. И я думаю, что это гораздо лучший способ локализовать столбцы (и только столбцы) вdata.frame
(и это быстрее). Проверка:cars[-1]
(один столбецdata.frame
) или лучшеcars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
.Чтобы удалить один или несколько столбцов по имени, когда имена столбцов известны (в отличие от определения во время выполнения), мне нравится
subset()
синтаксис. Например, для фрейма данныхудалить только
a
столбец, который вы могли бы сделатьи удалить
b
иd
столбцы , которые вы могли бы сделатьВы можете удалить все столбцы между
d
иb
с:Как я уже говорил выше, этот синтаксис работает только тогда, когда известны имена столбцов. Это не будет работать, когда, скажем, имена столбцов определяются программно (то есть присваиваются переменной). Я воспроизведу это предупреждение из
?subset
документации:источник
(Для полноты) Если вы хотите удалить столбцы по имени, вы можете сделать это:
Включение
drop = F
гарантирует, что результат все равно будетdata.frame
четным, если останется только один столбец.источник
Размещенные ответы очень хороши при работе с
data.frame
s. Однако эти задачи могут быть довольно неэффективными с точки зрения памяти. В случае больших данных удаление столбца может занять необычно много времени и / или привести кout of memory
ошибке из-за ошибок. Пакетdata.table
помогает решить эту проблему с:=
оператором:Я должен собрать более крупный пример, чтобы показать различия. Я обновлю этот ответ в какой-то момент с этим.
источник
data.table::set
функция может быть использованаdata.frame
для быстрого удаления или изменения столбца без копирования. Смотрите здесьСуществует несколько вариантов удаления одного или нескольких столбцов с
dplyr::select()
некоторыми вспомогательными функциями. Вспомогательные функции могут быть полезны, потому что некоторые не требуют именования всех определенных столбцов, которые будут отброшены. Обратите внимание, что для удаления столбцовselect()
необходимо использовать ведущий,-
чтобы отменить имена столбцов.Используя
dplyr::starwars
пример данных для некоторого разнообразия в именах столбцов:Вы также можете перейти по номеру столбца:
источник
При этом вы можете удалить
column
и сохранитьvariable
в другомvariable
.источник