2014-08-31 21 views
6

Ich habe einen Datenrahmen, aus dem ich alle Zeilen löschen möchte, während die ursprüngliche Struktur (Spalten) beibehalten wird.Wie alle Zeilen aus einem data.frame in r zu entfernen

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)) 

Ich habe versucht:

ddf = NA 

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

aber sie funktionieren nicht. Vielen Dank für Ihre Hilfe zu dieser grundlegenden Frage.

+1

Statt '0', könnte besser sein, 'df verwenden [ NULL,] ' –

Antwort

14

Wenn Sie wirklich alle Zeilen löschen möchten:

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

Wenn Sie die Struktur, indem sie unter Verwendung von Platzhalter bedeuten:

> 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

Warum die Null? Ich denke 'ddf <- ddf [c(),] macht mehr Sinn. –

+1

@GaborCsardi - wäre nicht 'df [NULL,]' logisch am sinnvollsten? –

+1

Nun, wenn Sie wissen, was Indexierung mit 'NULL' bedeutet. Ähnlich wie beim Indexieren mit Null. Sie sind beide dokumentiert, also sind sie feine Lösungen. Aber ich denke, 'c()' ist nur intuitiver, Sie wählen null Zeilen. Um sicher zu sein, dass ich 'NULL' und Null habe, musste ich das Handbuch überprüfen ..... Aber vielleicht ist es nur ich und jeder andere weiß, was Indexierung mit' NULL' bedeutet. –

Verwandte Themen