2011-09-24 35 views
62

Ho un set di dati con 11 colonne con oltre 1000 righe ciascuna. Le colonne erano etichettate V1, V2, V11, ecc. Ho sostituito i nomi con qualcosa di più utile usando il comando "c". Non mi sono reso conto che la riga 1 conteneva anche etichette per ogni colonna ei miei dati effettivi inizia sulla riga 2.Come cancellare la prima riga di un dataframe in R?

C'è un modo per eliminare la riga 1 e il decremento?

risposta

105

mantenere le etichette dal file originale come questo (supponendo che lo si legge in via read.table() o una delle sue wrapper.):

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

Se avete le colonne di nome xey, è possibile affrontarli in questo modo:

df$x 
df$y 

Se desideri eliminare in realtà t In primo luogo ha riga da una data.frame, è possibile utilizzare indici negativi come questo:

df = df[-1,] 

Se vuoi eliminare una colonna da una data.frame, è possibile assegnare ad esso NULL:

Ecco alcuni semplici esempi di come creare e manipolare un data.frame in 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

Non sono sicuro che sia chiaro a @akz: in 'header = T' il' T' sta per 'TRUE', quindi questo parametro dice a R di caricare l'intestazione. Vedi '? Read.table' per i dettagli. – daroczig

+0

Si noti che se si dispone di un frame di dati a colonna singola, si prega di guardare questa risposta - https://stackoverflow.com/a/3232770/4606130 dove sarà necessario un 'drop = FALSE' anche quando l'indicizzazione negativa – micstr

21

È possibile utilizzare l'indicizzazione negativo per rimuovere le righe, ad esempio:

dat <- dat[-1, ] 

Ecco un esempio:

> 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 

Detto questo, si può avere più problemi che solo rimuovendo le etichette che ha finito per sulla riga 1. È più probabile che R abbia interpretato i dati come testo e quindi convertiti in fattori. Controlla cosa str(foo), dove foo è il tuo oggetto dati, dice sui tipi di dati.

Sembra basta header = TRUE nella chiamata a leggere i dati

+0

totalmente ragione Gavin. Era il capo = FALSO a dare quello. – akz

11

Nessuno probabilmente vuole veramente rimuovere fila uno. Quindi, se siete alla ricerca di qualcosa di significativo, vale a dire la selezione condizionale

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

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

Questo è un rispondere a una domanda che non è stata posta.Penso che sia più confuso che aiutare. –

3

dat <- dat[-1, ] funzionato ma ha ucciso il mio dataframe, trasformandolo in un altro tipo. Dovevamo invece usare dat <- data.frame(dat[-1, ]) ma questo è probabilmente un caso speciale dato che inizialmente questo dataframe aveva solo una colonna.

+0

Questo è un commento, non una risposta! Nonostante ciò non ho potuto riprodurre. –

3

Io non sono esperto, ma questo può funzionare così,

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

In realtà questo non funziona quando 'nrow (dat) == 1': Allora è conservata la dat originale. –

Problemi correlati