Удалите весь столбец из data.frame в R

Кто-нибудь знает, как удалить весь столбец из 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 

и я хочу удалить второй столбец.

Вы можете установить его в NULL .

 > Data$genome <- NULL > head(Data) chr region 1 chr1 CDS 2 chr1 exon 3 chr1 CDS 4 chr1 exon 5 chr1 CDS 6 chr1 exon 

Как отмечалось в комментариях, вот некоторые другие возможности:

 Data[2] <- NULL # Wojciech Sobala Data[[2]] <- NULL # same as above Data <- Data[,-2] # Ian Fellows Data <- Data[-2] # same as above 

Вы можете удалить несколько столбцов с помощью:

 Data[1:2] <- list(NULL) # Marek Data[1:2] <- NULL # does not work! 

Будьте осторожны с подмножеством матриц, хотя, как вы можете в конечном итоге с вектором:

 Data <- Data[,-(2:3)] # vector Data <- Data[,-(2:3),drop=FALSE] # still a data.frame 

Чтобы удалить один или несколько столбцов по имени, когда имена столбцов известны (в отличие от определения во время выполнения), мне нравится синтаксис subset() . Например, для кадра данных

 df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6) 

удалить только столбец, который вы могли бы сделать

 Data <- subset( Data, select = -a ) 

и удалить столбцы b и d вы могли бы сделать

 Data <- subset( Data, select = -c(d, b ) ) 

Вы можете удалить все столбцы между d и b с помощью:

 Data <- subset( Data, select = -c( d : b ) 

Как я уже говорил выше, этот синтаксис работает только тогда, когда известны имена столбцов. Он не будет работать, если говорить, что имена столбцов определяются программно (т.е. назначаются переменной). Я воспроизведу это предупреждение из документации ?subset :

Предупреждение:

Это функция удобства, предназначенная для интерактивного использования. Для программирования лучше использовать стандартные функции подмножества, такие как '[', и, в частности, нестандартная оценка подмножества аргументов может иметь непредвиденные последствия.

data.frame ответы очень хороши при работе с data.frame s. Однако эти задачи могут быть довольно неэффективными с точки зрения памяти. При больших данных удаление столбца может занять необычно большое количество времени и / или сбой из- out of memory ошибок out of memory . Пакет data.table помогает решить эту проблему с помощью оператора: := :

 library(data.table) > dt <- data.table(a = 1, b = 1, c = 1) > dt[,a:=NULL] bc [1,] 1 1 

Я должен собрать более яркий пример, чтобы показать различия. В какой-то момент я обновлю этот ответ.

(Для полноты) Если вы хотите удалить столбцы по имени, вы можете сделать это:

 cols.dont.want <- "genome" cols.dont.want <- c("genome", "region") # if you want to remove multiple columns data <- data[, ! names(data) %in% cols.dont.want, drop = F] 

Включение drop = F гарантирует, что результат все равно будет data.frame даже если останется только один столбец.

С помощью этого вы можете удалить column и сохранить variable в другую variable .

 df = subset(data, select = -c(genome) ) 
  • Как подмножить данные в R без потери строк NA?
  • Быстрое чтение очень больших таблиц в качестве данных
  • Объединение по диапазону в R - Применение циклов
  • Невозможно выполнить цикл с пакетом листов R для создания нескольких карт
  • dplyr суммировать: Эквивалент «.drop = FALSE» для сохранения групп с нулевой длиной в выходе
  • Как я могу заставить rJava использовать новую версию java для osx?
  • Рабочий процесс для статистического анализа и составления отчетов
  • Создать столбец с группируемыми значениями на основе другого столбца
  • Полностью воспроизводимые параллельные модели с использованием каретки
  • Добавление столбца в data.frame
  • Самый быстрый способ найти второе (третье ...) наивысшее / наименьшее значение в векторе или столбце
  • Interesting Posts
    Давайте будем гением компьютера.