¿Cómo eliminar la primera fila de un marco de datos en R?


85

Tengo un conjunto de datos con 11 columnas con más de 1000 filas cada una. Las columnas estaban etiquetadas como V1, V2, V11, etc. Reemplacé los nombres con algo más útil para mí usando el comando "c". No me di cuenta de que la fila 1 también contenía etiquetas para cada columna y mis datos reales comienzan en la fila 2.

¿Hay alguna forma de eliminar la fila 1 y disminuirla?

Respuestas:


139

Mantenga las etiquetas de su archivo original de esta manera:

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

Si tiene columnas denominadas xey, puede abordarlas así:

df$x
df$y

Si realmente desea eliminar la primera fila de un data.frame, puede usar índices negativos como este:

df = df[-1,]

Si desea eliminar una columna de un data.frame, puede asignarle NULL:

df$x = NULL

Aquí hay algunos ejemplos simples de cómo crear y manipular un data.frame en 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
No estoy seguro de si está claro para @akz: en header=Tlos Tsoportes TRUE, por lo que este parámetro le dice a R que cargue el encabezado. Consulte ?read.tablepara obtener más detalles.
daroczig

Tenga en cuenta que si tiene un marco de datos de una sola columna, mire esta respuesta - stackoverflow.com/a/3232770/4606130 donde también necesitará una drop = FALSEindexación negativa
micstr

28

Puede utilizar la indexación negativa para eliminar filas, por ejemplo:

dat <- dat[-1, ]

Aquí hay un ejemplo:

> 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

Dicho esto, es posible que tenga más problemas que simplemente quitar las etiquetas que terminaron en la fila 1. Es más probable que R haya interpretado los datos como texto y, por lo tanto, los haya convertido en factores. Revisar quéstr(foo) , dónde fooestá su objeto de datos, dice sobre los tipos de datos.

Parece que solo necesita header = TRUEleer los datos en su llamada (suponiendo que los lea a través de read.table()uno de sus contenedores).


13

Probablemente nadie quiera eliminar la fila uno. Entonces, si está buscando algo significativo, esa es la selección condicional

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

>> setNew<-set[!(set$length=="long" & set$E==0),]

Esta es una respuesta para una pregunta que no se hizo. Creo que es más confuso que ayudar.
U. Windl

12

Si bien estoy de acuerdo con la respuesta más votada, aquí hay otra forma de mantener todas las filas excepto la primera:

dat <- tail(dat, -1)

Esto también se puede lograr utilizando el dplyrpaquete de Hadley Wickham .

dat <- dat %>% slice(-1)

7

No soy un experto, pero esto también puede funcionar,

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

En realidad, esto no funciona cuando nrow(dat) == 1: Entonces se conserva el dat original.
U. Windl

6

dat <- dat[-1, ]funcionó pero mató mi marco de datos, cambiándolo a otro tipo. En su lugar, tuve que usar, dat <- data.frame(dat[-1, ])pero este es posiblemente un caso especial ya que este marco de datos inicialmente solo tenía una columna.


¡Esto es un comentario, no una respuesta! A pesar de eso, no pude reproducirme.
U. Windl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.