Удалите весь столбец из 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
и я хочу удалить второй столбец.
- Как удалить столбцы, содержащие ТОЛЬКО НС?
- Как мне обращаться с «пакетом ххх» не доступно (для R версии xyz)? Предупреждение?
- Изменение метки грани в математической формуле в ggplot2
- Создайте матрицу диаграмм рассеяния (пар () эквивалентных) в ggplot2
- Как рандомизировать (или переместить) кадр данных и разбить по столбцу?
- Перекодировать категориальный фактор с N категориями в N двоичных столбцов
- Изменить кадр данных с тремя столбцами на матрицу («длинный» до «широкого» формата)
- Что такое «объект типа« закрытие »не является подмножеством« ошибка в «Блестящем»?
- Текущая дата YAML в rmarkdown
- Получение состояния переменных после ошибки в R
- Настроить тики x-axis
- Как я могу сделать графики согласованной ширины в ggplot (с легендами)?
- Как рисовать штабелированные столбцы в ggplot2, которые показывают процентные ставки по группе?
Вы можете установить его в 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) )