2014-08-31 27 views
6

Ho un frame di dati dal quale voglio eliminare tutte le righe mantenendo la struttura originale (colonne).come rimuovere tutte le righe da un data.frame in r

ddf 
    vint1 vint2 vfac1 vfac2 
1  9 10  1  3 
2  9  6  3  4 
3  6  2  2  2 
4 10  6  2  4 
5  7 12  3  2 
> 
> 
> 
> dput(ddf) 
structure(list(vint1 = c(9L, 9L, 6L, 10L, 7L), vint2 = c(10L, 
6L, 2L, 6L, 12L), vfac1 = structure(c(1L, 3L, 2L, 2L, 3L), .Label = c("1", 
"2", "3"), class = "factor"), vfac2 = structure(c(2L, 3L, 1L, 
3L, 1L), .Label = c("2", "3", "4"), class = "factor")), .Names = c("vint1", 
"vint2", "vfac1", "vfac2"), class = "data.frame", row.names = c(NA, 
-5L)) 

ho provato:

ddf = NA 

for(i in 1:nrow(ddf) ddf[i,] = NULL 

ma non funzionano. Grazie per il tuo aiuto in questa domanda di base.

+1

Invece di '0', potrebbe essere meglio usare' df [ NULL,] ' –

risposta

14

Se davvero si vuole eliminare tutte le righe:

> ddf <- ddf[0,] 
> ddf 
[1] vint1 vint2 vfac1 vfac2 
<0 rows> (or 0-length row.names)  

Se vuoi dire, mantenendo la struttura utilizzando i segnaposti:

> ddf[,]=matrix(ncol=ncol(ddf), rep(NA, prod(dim(ddf)))) 
> ddf 
    vint1 vint2 vfac1 vfac2 
1 NA NA NA NA 
2 NA NA NA NA 
3 NA NA NA NA 
4 NA NA NA NA 
5 NA NA NA NA 
+1

Perché lo zero? Penso che 'ddf <- ddf [c(),]' abbia più senso. –

+1

@GaborCsardi - non sarebbe 'df [NULL,]' essere il più appropriato, logicamente? –

+1

Bene, se sai cosa significa indicizzare con 'NULL'. Analogamente all'indicizzazione con zero. Sono entrambi documentati, quindi sono soluzioni soddisfacenti. Ma penso che 'c()' è solo più intuitivo, si seleziona zero righe. Per essere sicuro di 'NULL' e zero dovevo controllare il manuale ..... Ma forse sono solo io e tutti sanno che cosa significa indicizzare con' NULL'. –

Problemi correlati