Come ottenere media, mediana e altre statistiche sull’intera matrice, matrice o dataframe?

So che questa è una domanda di base, ma per qualche strana ragione non riesco a trovare una risposta.

Come dovrei applicare le funzioni statistiche di base come media, mediana, ecc. Su tutto l’array, matrice o dataframe per ottenere risposte univoche e non un vettore su righe o colonne

Visto che questo è un bel po ‘, lo tratterò un po’ più esaurientemente, includendo “ecc.” pezzo oltre a mean e median .

  1. Per una matrice o matrice, come hanno affermato gli altri, la mean e la median restituiscono un singolo valore. Tuttavia, var calcolerà le covarianze tra le colonne di una matrice bidimensionale. È interessante notare che, per un array multidimensionale, var torna a restituire un singolo valore. sd su una matrice 2-d funzionerà, ma è deprecato, restituendo la deviazione standard delle colonne. Ancora meglio, mad restituisce un singolo valore su una matrice 2-d e una matrice multidimensionale. Se si desidera che venga restituito un solo valore, il percorso più sicuro consiste nel forzare prima utilizzando as.vector() . Divertirsi ancora?

  2. Per un data.frame , mean è deprecato, ma agirà nuovamente sulle colonne separatamente. median richiede di forzare prima un vettore o non unlist . Come prima, var restituirà le covarianze, e sd è nuovamente deprecato ma restituirà la deviazione standard delle colonne. mad richiede che tu costringi a un vettore o non unlist . In generale per un data.frame se vuoi che qualcosa agisca su tutti i valori, in genere non lo unlist prima.

Modifica: ultime notizie (): in R 3.0.0 mean.data.frame è defuncificato:

 o mean() for data frames and sd() for data frames and matrices are defunct. 

Per impostazione predefinita, la mean e la median ecc funzionano su un’intera matrice o matrice.

Per esempio:

 # array: m <- array(runif(100),dim=c(10,10)) mean(m) # returns *one* value. # matrix: mean(as.matrix(m)) # same as before 

Per i frame di dati, è ansible forzarli prima su una matrice (il motivo per cui questo è di default su colonne è perché un dataframe può avere colonne con stringhe in esso, che non puoi prendere in media):

 # data frame mdf <- as.data.frame(m) # mean(mdf) returns column means mean( as.matrix(mdf) ) # one value. 

Basta fare attenzione che il dataframe abbia tutte le colonne numeriche prima di eseguire la coercizione alla matrice. O escludere quelli non numerici.