2012-02-24 10 views

Respuesta

22

Dado que esto viene un poco, voy a tratar esto un poco más exhaustivamente, para incluir el 'etc.' pieza además de mean y median.

  1. Para una matriz, o una matriz, como los otros han mencionado, mean y median devolverá un solo valor. Sin embargo, var calculará las covarianzas entre las columnas de una matriz bidimensional. Curiosamente, para una matriz multidimensional, var vuelve a devolver un único valor. sd en una matriz de 2 d funcionará, pero está en desuso, devolviendo la desviación estándar de las columnas. Aún mejor, mad devuelve un único valor en una matriz de 2 d y una matriz multidimensional. Si quiere un único valor devuelto, la ruta más segura es forzar primero usando as.vector(). ¿Te estás divirtiendo?

  2. Para data.frame, mean está obsoleto, pero volverá a actuar en las columnas por separado. median requiere que obligue a un vector primero, o unlist. Como antes, var devolverá las covarianzas, y sd vuelve a estar obsoleto, pero devolverá la desviación estándar de las columnas. mad requiere que forzar a un vector o unlist. En general, para un data.frame si desea que algo actúe en todos los valores, generalmente solo lo hará unlist primero.

Editar: noticias de última hora tardía(): en la que R se defunctified 3.0.0 mean.data.frame:

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

Por defecto, mean y median etc funcionen a pesar de una matriz completa o matriz.

Ej:

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

# matrix: 
mean(as.matrix(m)) # same as before 

Para las tramas de datos, puede obligarlos a una primera matriz (la razón de que esto es por defecto sobre columnas se debe a una trama de datos puede tener columnas con cadenas en ella, que se puede' t toma la media de):

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

Sólo tenga cuidado de que su trama de datos tiene todas las columnas numéricas antes de forzarla a la matriz. O excluya los no numéricos.

+0

Pero para tramas de datos, '' mean' y median' no funcionan como es . Como usted señala, al forzar el df a la matriz se producirá un error debido a columnas no numéricas (por lo que debe crear un índice de columnas para que solo toque las columnas numéricas). (Además, si el marco de datos es grande, no es eficiente ni escalable para convertirlo con 'as.matrix (mdf)' - variable temporal grande). – smci

Cuestiones relacionadas