2011-09-24 20 views
62

Tengo un conjunto de datos con 11 columnas con más de 1000 filas cada una. Las columnas fueron etiquetadas como V1, V2, V11, etc. Reemplacé los nombres por 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.¿Cómo eliminar la primera fila de un marco de datos en R?

¿Hay alguna manera de eliminar la fila 1 y disminuir?

Respuesta

105

Mantenga las etiquetas de su archivo original como esto (suponiendo que lo lea en medio de read.table() o uno de él es envoltorios.):

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

Si ha llamado columnas X e y, puede dirigirse a ellos de esta manera:

df$x 
df$y 

Si desea eliminar realidad t por primera fila de una hoja.de.datos, puede utilizar los índices negativos como este:

df = df[-1,] 

Si desea eliminar una columna de una hoja.de.datos, puede asignar NULL a ella:

Éstos son algunos ejemplos sencillos de cómo crear y manipular un hoja.de.datos en I:

# 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 si está claro para @akz: en 'header = T' the' T' significa 'TRUE', entonces este parámetro le dice a R que cargue el encabezado. Ver '? Read.table' para más detalles. – daroczig

+0

Tenga en cuenta que si tiene un marco de datos de una sola columna, por favor, mire esta respuesta - https://stackoverflow.com/a/3232770/4606130 donde necesitará un 'drop = FALSE' también cuando indexe negativamente – micstr

21

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

dat <- dat[-1, ] 

Aquí se muestra 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 sólo la eliminación de las etiquetas que terminaron en la fila 1. Es más probable que R haya interpretado los datos como texto y de allí se haya convertido en factores. Compruebe qué str(foo), donde foo es su objeto de datos, dice sobre los tipos de datos.

Parece que sólo tiene header = TRUE en su llamada a leer en los datos

+0

Gavin toda la razón. Fue la cabeza = FALSO que dio eso. – akz

11

Nadie probable que realmente quiere eliminar la fila uno. Así que si usted está buscando algo significativo, es decir la selección condicional

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

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

Esto es un respuesta para una pregunta que no fue hechaCreo que es más confuso que ayudar. –

3

dat <- dat[-1, ] trabajaron pero mató a mi trama de datos, su transformación en otro tipo. Tuvo que usar dat <- data.frame(dat[-1, ]), pero este es posiblemente un caso especial, ya que inicialmente este dataframe solo tenía una columna.

+0

¡Esto es un comentario, no una respuesta! A pesar de eso no pude reproducirme. –

3

No soy experto, pero esto puede funcionar tan bien,

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

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

Cuestiones relacionadas