¿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?

akz
fuente

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
James Thompson
fuente
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).

Gavin Simpson
fuente
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),]
usuario3495945
fuente
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)
EMcKinney
fuente
7

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

dat <- dat[2:nrow(dat), ]
Bipul Mohanto
fuente
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.

cardamomo
fuente
¡Esto es un comentario, no una respuesta! A pesar de eso, no pude reproducirme.
U. Windl