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?

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

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.)


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),]

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)

7

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

dat <- dat[2:nrow(dat), ]

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.


Este é um comentário, não uma resposta! Apesar disso, não consegui reproduzir.
U. Windl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.