Come eliminare la prima riga di un dataframe in R?


86

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 per me utilizzando il comando "c". Non mi rendevo conto che la riga 1 conteneva anche etichette per ogni colonna e i miei dati effettivi iniziano dalla riga 2.

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

Risposte:


140

Mantieni le etichette del tuo file originale in questo modo:

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

Se hai colonne denominate x e y, puoi indirizzarle in questo modo:

df$x
df$y

Se desideri effettivamente eliminare la prima riga da un data.frame, puoi utilizzare indici negativi come questo:

df = df[-1,]

Se desideri eliminare una colonna da un data.frame, puoi assegnarle NULL:

df$x = 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
Io non sono sicuro se è chiaro a @akz: nella header=Tla Tsta per TRUE, quindi questo parametro indica R per intestazione carico. Vedere ?read.tableper i dettagli.
daroczig

Nota che se hai un frame di dati a colonna singola, guarda questa risposta: stackoverflow.com/a/3232770/4606130 dove avrai bisogno anche di un drop = FALSEquando indicizzazione negativa
micstr

28

Puoi utilizzare l'indicizzazione negativa 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, potresti avere più problemi rispetto alla semplice rimozione delle etichette che sono finite sulla riga 1. È più probabile che R abbia interpretato i dati come testo e quindi convertito in fattori. Controlla cosa dice str(foo), dov'è il footuo oggetto dati, sui tipi di dati.

Sembra che tu abbia solo bisogno header = TRUEnella tua chiamata di leggere i dati (supponendo che tu li legga in via read.table()o in uno dei suoi wrapper.)


14

Sebbene sia d'accordo con la risposta più votata, ecco un altro modo per mantenere tutte le righe tranne la prima:

dat <- tail(dat, -1)

Ciò può essere ottenuto anche utilizzando il dplyrpacchetto di Hadley Wickham .

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

13

Nessuno probabilmente vuole davvero rimuovere la prima riga. Quindi, se stai cercando qualcosa di significativo, questa è la selezione condizionale

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

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

Questa è una risposta a una domanda che non è stata posta. Penso che sia più confuso che aiutare.
U. Windl

7

Non sono un esperto, ma potrebbe funzionare anche

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

In realtà questo non funziona quando nrow(dat) == 1: Quindi i dati originali vengono conservati.
U. Windl

6

dat <- dat[-1, ]ha funzionato ma ha ucciso il mio dataframe, cambiandolo in un altro tipo. dat <- data.frame(dat[-1, ])Dovevo invece usare, ma questo è forse un caso speciale poiché questo dataframe inizialmente aveva solo una colonna.


Questo è un commento, non una risposta! Nonostante ciò non sono riuscito a riprodurmi.
U. Windl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.