Come subsetare la matrice su una colonna, mantenere il tipo di dati della matrice, mantenere i nomi di riga / colonna?


84

Quando inserisco una matrice in una singola colonna, il risultato è di classe numeric, non matrice (cioè myMatrix [, 5] in un sottoinsieme alla quinta colonna). Esiste un modo compatto per creare sottoinsiemi a una singola colonna, mantenere il formato della matrice e mantenere i nomi di riga / colonna senza fare qualcosa di complicato come:

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

Risposte:


122

Usa l' drop=FALSEargomento per [.

m <- matrix(1:10,5,2)
rownames(m) <- 1:5
colnames(m) <- 1:2
m[,1]             # vector
m[,1,drop=FALSE]  # matrix

Avrei giurato che ho visto questo proprio di recente, ma potrebbe essere stato il comportamento dataframe analogo che è stato messo in discussione: stackoverflow.com/questions/6941985/...
IRTFM

5
Se vuoi indicizzare solo la prima dimensione, puoi usare drop come segue:m[1,,drop=FALSE]
Kevin Bullaughey

Per fornire un esempio su base statistica, utilizzando le distanze D di Cooks e quindi selezionando i valori in base a un valore di cut-off es. 0.1, risulteranno i valori di cooksD con il rispettivo numero di righe nel relativo dataset cooksd<-as.data.frame(cooks.distance(ft1)) cooksD_outliers<-cooksd[cooksd>0.1,drop=FALSE,]
Elias EstatisticsEU

risultato <-apply (temp, 1, function (x) tapply (x, genesymbol, function (x) mean (x, na.rm = T))) Come affrontare il problema che il risultato è un array, ma in realtà, Voglio che sia un frame di dati di una colonna? Grazie
Shicheng Guo

@ ShichengGuo: dovresti fare una nuova domanda.
Joshua Ulrich
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.