2015-09-10 1 views
10
> dput(test) 
structure(list(MEMORY1 = c(7.5, 6, 6, 3.5, 5, 5), MEMORY2 = c(5, 
7.5, 3, 3.5, 5, 5), MEMORY3 = c(5, 3.5, 3, 3.5, 5, 2), MEMORY4 = c(2, 
1.5, 3, 3.5, 1, 2), MEMORY5 = c(7.5, 3.5, 3, 3.5, 5, 7), MEMORY6 = c(2, 
5, 7.5, 7.5, 5, 5), MEMORY7 = c(2, 1.5, 3, 3.5, 5, 2), MEMORY8 = c(5, 
7.5, 7.5, 7.5, 5, 8)), .Names = c("MEMORY1", "MEMORY2", "MEMORY3", 
"MEMORY4", "MEMORY5", "MEMORY6", "MEMORY7", "MEMORY8"), row.names = c(NA, 
6L), class = "data.frame") 
> test 
    MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8 
1  7.5  5.0  5.0  2.0  7.5  2.0  2.0  5.0 
2  6.0  7.5  3.5  1.5  3.5  5.0  1.5  7.5 
3  6.0  3.0  3.0  3.0  3.0  7.5  3.0  7.5 
4  3.5  3.5  3.5  3.5  3.5  7.5  3.5  7.5 
5  5.0  5.0  5.0  1.0  5.0  5.0  5.0  5.0 
6  5.0  5.0  2.0  2.0  7.0  5.0  2.0  8.0 

Ich habe einen data.frame, und ich möchte nur die erste Zeile Untermenge. Wenn ich test[1, ] tun, ist das ErgebnisR: Subsetting data.frame ohne Spaltennamen

> test[1, ] 
    MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8 
1  7.5  5  5  2  7.5  2  2  5 

Wie kann ich die data.frame Teilmenge so, dass ich ohne die Spaltennamen nur einen Vektor der Zahlen zu bekommen?

Antwort

8

Was Sie wollen, ist ein numerischer Vektor anstelle eines data.frame. Dafür können Sie einfach as.numeric verwenden, um die Umwandlung

> as.numeric(df[1,]) 
[1] 7.5 5.0 5.0 2.0 7.5 2.0 2.0 5.0 
6

Sie können unlist mit der Option use.names=FALSE verwenden, um nur vector ohne Namen zurückgeben.

unlist(test[1,], use.names=FALSE) 
#[1] 7.5 5.0 5.0 2.0 7.5 2.0 2.0 5.0 

test[1,] ist immer noch ein data.frame mit 8 Spalten. Eine data.frame kann als eine list mit derselben length für ihre list Elemente (oder Spalten) angesehen werden. So können wir unlist verwenden. Dies funktioniert auch, wenn Sie eine vector aus mehr als einer Zeile erstellen.

unlist(test[1:2,], use.names=FALSE) 

Oder wie @Frank vorgeschlagen, wenn wir, indem die Dimensionen mehrere Zeilen subsetting, setzen wir die Namen NULL und matrix konvertieren.

as.matrix(setNames(test[1:2,],NULL)) 
+1

In Bezug auf den zweiten Teil zu tun, denke ich, dass das nicht wirklich „subsetting“ ist (aus dem Titel des OP), da die Abmessungen ändern. Vielleicht 'as.matrix (setNames (test [1: 2,], NULL))' oder die goofier '\' dimnames <- \ '(als.matrix (test [1: 2,]), NULL) ' – Frank

+0

@ Frank Danke. es macht Sinn. – akrun

+2

Eine Alternative zu 'setNames' für die' as.matrix'-Version ist die Utility-Funktion 'unname' – user295691

Verwandte Themen