Como deletar a primeira linha de um dataframe em R?

86

Eu tenho um conjunto de dados com 11 colunas com mais de 1000 linhas cada. As colunas foram rotuladas como V1, V2, V11, etc. Substituí os nomes por algo mais útil para mim usando o comando "c". Não percebi que a linha 1 também continha rótulos para cada coluna e meus dados reais começam na linha 2.

Existe uma maneira de excluir a linha 1 e decrementar?

akz
fonte

Respostas:

140

Mantenha os rótulos de seu arquivo original como este:

df = read.table('data.txt', header = T)

Se você tiver colunas chamadas x e y, poderá tratá-las assim:

df$x
df$y

Se quiser realmente excluir a primeira linha de um data.frame, você pode usar índices negativos como este:

df = df[-1,]

Se quiser excluir uma coluna de um data.frame, você pode atribuir NULL a ela:

df$x = NULL

Aqui estão alguns exemplos simples de como criar e manipular um data.frame em R:

# create a data.frame with 10 rows
> x = rnorm(10)
> y = runif(10)
> df = data.frame( x, y )

# write it to a file
> write.table( df, 'test.txt', row.names = F, quote = F )

# read a data.frame from a file: 
> read.table( df, 'test.txt', header = T )

> df$x
 [1] -0.95343778 -0.63098637 -1.30646529  1.38906143  0.51703237 -0.02246754
 [7]  0.20583548  0.21530721  0.69087460  2.30610998
> df$y
 [1] 0.66658148 0.15355851 0.60098886 0.14284576 0.20408723 0.58271061
 [7] 0.05170994 0.83627336 0.76713317 0.95052671

> df$x = x
> df
            y           x
1  0.66658148 -0.95343778
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df[-1,]
            y           x
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df$x = NULL
> df 
            y
1  0.66658148
2  0.15355851
3  0.60098886
4  0.14284576
5  0.20408723
6  0.58271061
7  0.05170994
8  0.83627336
9  0.76713317
10 0.95052671
James Thompson
fonte
3
Não tenho a certeza se é claro para @akz: header=Tno Tsignifica TRUE, de modo que este parâmetro informa R para cabeçalho de carga. Veja ?read.tablepara detalhes.
daroczig,
Observe que se você tiver um quadro de dados de coluna única, por favor, olhe para esta resposta - stackoverflow.com/a/3232770/4606130 onde você também precisará de um drop = FALSEao indexar negativo
micstr
28

Você pode usar a indexação negativa para remover linhas, por exemplo:

dat <- dat[-1, ]

Aqui está um exemplo:

> dat <- data.frame(A = 1:3, B = 1:3)
> dat[-1, ]
  A B
2 2 2
3 3 3
> dat2 <- dat[-1, ]
> dat2
  A B
2 2 2
3 3 3

Dito isso, você pode ter mais problemas do que apenas remover os rótulos que terminaram na linha 1. É mais provável que R tenha interpretado os dados como texto e, portanto, convertido em fatores. Verifique o que str(foo), onde fooestá o seu objeto de dados, diz sobre os tipos de dados.

Parece que você só precisa header = TRUEler os dados em sua chamada (supondo que você os tenha lido via read.table()ou um de seus wrappers.)

Gavin Simpson
fonte
13

Provavelmente ninguém deseja remover a linha um. Então, se você está procurando algo significativo, isso é seleção condicional

#remove rows that have long length and "0" value for vector E

>> setNew<-set[!(set$length=="long" & set$E==0),]
user3495945
fonte
Esta é uma resposta a uma pergunta que não foi feita. Acho que é mais confuso do que ajudar.
U. Windl
13

Embora eu concorde com a resposta mais votada, aqui está outra maneira de manter todas as linhas, exceto a primeira:

dat <- tail(dat, -1)

Isso também pode ser feito usando o dplyrpacote de Hadley Wickham .

dat <- dat %>% slice(-1)
EMcKinney
fonte
7

Não sou especialista, mas também pode funcionar,

dat <- dat[2:nrow(dat), ]
Bipul Mohanto
fonte
Na verdade, isso não funciona quando nrow(dat) == 1: Em seguida, o dat original é preservado.
U. Windl
6

dat <- dat[-1, ]funcionou, mas matou meu dataframe, mudando-o para outro tipo. Tive que usar, dat <- data.frame(dat[-1, ])mas este é possivelmente um caso especial, pois esse dataframe inicialmente tinha apenas uma coluna.

cardamomo
fonte
Este é um comentário, não uma resposta! Apesar disso, não consegui reproduzir.
U. Windl