Wie kann eine Matrix in eine Spalte unterteilt, der Matrixdatentyp und die Zeilen- / Spaltennamen beibehalten werden?

84

Wenn ich eine Matrix in eine einzelne Spalte unterteile, ist das Ergebnis eine numerische Klasse, keine Matrix (dh myMatrix [, 5], um in die fünfte Spalte zu unterteilen). Gibt es eine kompakte Möglichkeit, eine Teilmenge in eine einzelne Spalte zu unterteilen, das Matrixformat beizubehalten und die Zeilen- / Spaltennamen beizubehalten, ohne etwas Kompliziertes zu tun, wie:

matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )
SFun28
quelle

Antworten:

122

Verwenden Sie das drop=FALSEArgument zu [.

m <- matrix(1:10,5,2)
rownames(m) <- 1:5
colnames(m) <- 1:2
m[,1]             # vector
m[,1,drop=FALSE]  # matrix
Joshua Ulrich
quelle
Ich hätte geschworen, dass ich das erst kürzlich gesehen habe, aber möglicherweise wurde das analoge Datenrahmenverhalten in Frage gestellt: stackoverflow.com/questions/6941985/…
IRTFM
5
Wenn Sie nur nach der ersten Dimension indizieren möchten, können Sie drop wie folgt verwenden:m[1,,drop=FALSE]
Kevin Bullaughey
Um ein Beispiel aus statistischen Gründen zu geben, indem Sie die D-Abstände von Cooks verwenden und dann Werte basierend auf einem Grenzwert auswählen, z. B. 0,1, werden die CooksD-Werte mit ihrer jeweiligen Anzahl von Zeilen im relativen Datensatz cooksd<-as.data.frame(cooks.distance(ft1)) cooksD_outliers<-cooksd[cooksd>0.1,drop=FALSE,]
Elias EstatisticsEU
Ergebnis <-apply (temp, 1, function (x) tapply (x, Genesymbol, function (x) mean (x, na.rm = T))) Wie man mit dem Problem umgeht, dass das Ergebnis ein Array ist, aber tatsächlich Ich möchte, dass es sich um einen einspaltigen Datenrahmen handelt. Danke
Shicheng Guo
@ ShichengGuo: Du solltest eine neue Frage stellen.
Joshua Ulrich