Alguém sabe como remover uma coluna inteira de um data.frame no R? Por exemplo, se eu receber esse 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
e eu quero remover a segunda coluna.
Respostas:
Você pode configurá-lo para
NULL
.Como apontado nos comentários, aqui estão algumas outras possibilidades:
Você pode remover várias colunas através de:
Tenha cuidado com o subconjunto da matriz, pois você pode acabar com um vetor:
fonte
Data[-2]
não precisa dedrop
argumento porque ele sempre retornamdata.frame
a partirdata.frame
. E eu acho que essa é uma maneira muito melhor de colunas localizadas (e apenas colunas) nodata.frame
(e é mais rápido). Confira:cars[-1]
(um coldata.frame
) ou melhorcars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
é necessário.Para remover uma ou mais colunas pelo nome, quando os nomes das colunas são conhecidos (em vez de serem determinados no tempo de execução), eu gosto da
subset()
sintaxe. Por exemplo, para o quadro de dadospara remover apenas a
a
coluna que você poderia fazere para remover as colunas
b
ed
você poderia fazerVocê pode remover todas as colunas entre
d
eb
com:Como eu disse acima, essa sintaxe funciona apenas quando os nomes das colunas são conhecidos. Não funcionará quando, digamos, os nomes das colunas forem determinados programaticamente (isto é, atribuídos a uma variável). Vou reproduzir este aviso da
?subset
documentação:fonte
(Para completar) Se você deseja remover as colunas pelo nome, pode fazer o seguinte:
A inclusão
drop = F
garante que o resultado ainda será um,data.frame
mesmo que apenas uma coluna permaneça.fonte
As respostas postadas são muito boas quando se trabalha com
data.frame
s. No entanto, essas tarefas podem ser bastante ineficientes do ponto de vista da memória. Com dados grandes, a remoção de uma coluna pode levar um tempo invulgarmente longo e / ou falhar devido aout of memory
erros. O pacotedata.table
ajuda a solucionar esse problema com o:=
operador:Eu deveria montar um exemplo maior para mostrar as diferenças. Vou atualizar esta resposta em algum momento com isso.
fonte
data.table::set
função pode ser usada emdata.frame
s para remover ou modificar uma coluna instantaneamente, sem fazer cópias. Veja aquiExistem várias opções para remover uma ou mais colunas com
dplyr::select()
e algumas funções auxiliares. As funções auxiliares podem ser úteis porque algumas não exigem que todas as colunas específicas sejam nomeadas para serem eliminadas. Observe que, para eliminar colunas usando,select()
você precisa usar uma guia-
para negar os nomes das colunas.Usando os
dplyr::starwars
dados de amostra para alguma variedade nos nomes de colunas:Você também pode soltar pelo número da coluna:
fonte
Com isso, você pode remover
column
e armazenarvariable
em outrovariable
.fonte