[R-es] Media de elementos tomados uno a uno de un data.frame

Rubén Gómez Antolí lobo en mucharuina.com
Lun Nov 28 23:23:43 CET 2011


Saludos:

El 28/11/11 11:26, Oscar Perpiñan Lamigueiro escribió:
> Hola,
>> Aprovecho para preguntar, ¿porque es mejor utilizar un data.frame en
>> vez de una matriz? (En mi ignorancia, y hasta el momento en mi corta
>> trayectoria por R, no he advertido demasiadas diferencias entre los
>> dos tipos de objetos)
>>
>
> Resumiendo mucho yo diría que un data.frame ofrece conjuntamente las
> funcionalidades de una matriz y una lista (por ejemplo, poder acceder a
> las "variables" por sus nombres). Más detalles:
> aquíhttp://cran.r-project.org/doc/manuals/R-intro.html#Data-frames

Mayor flexibilidad que una matriz, por decirlo así; vale.

>>> est = function(x){
>>> n = (x - 1) %/% 3 + 1
>>> ests = c('inv', 'pri', 'ver', 'oto')
>>> res = ests[n]
>>> res
>>> }
>>
>> Vale, entiendo que el objetivo de la función es «cambiar» el número de
>> los meses por la estación a la que pertenecen. Lo que me pierde es la
>> definición de «n», ¿restamos 1 para dividir por tres y sumar 1? No lo
>> pillo, lo siento.
>
> Creo que lo entenderás haciendo estos ejemplos:
>
>   1:12 %/% 3
>   0:11 %/% 3
>
> La función es básicamente una adaptación de quarters.POSIXt (donde
> as.POSIXlt()$mon está definido como 0:11).
>

¡Opss! El cociente de la división, ahora esta todo claro. Perdón por no 
revisar la documentación básica antes de abrir la boca, no se porque 
pensé que se hacía «algo raro» con la división.

>>> [...]
>> dieciséis columnas, que no son demasiadas, pero si hubiera muchas más,
>> ¿como podría «pasarlas» a cbind de una tacada?
>
> Prueba con la "dot notation":
>
> aggregate(. ~ est(meses) + dir,  data = vientos,  FUN = mean)

Eso me lo apunto. ^_^

>> (Bueno, poco a poco, acabo de pensar -cosa muy importante, pensar- y
>> probar con as.matrix(Aero.vientos[,3:14]) y funciona aunque las
>> columnas del resultado vienen señaladas con NA).
>>
>> - Segundo problema: ejecutando
> No he tenido tiempo de probar tus intentos pero creo que el problema
> está en el método de aggregate que empleas. Si lo primero que le
> entregas es una fórmula, el método aggregate.formula interpreta la
> fórmula usando lo que le proporciones como "data". Pero si lo primero
> que le das es un data.frame, entonces el segundo argumento es "by" y no
> necesita "data".

Esto me lo voy a tener que «estudiar» porque me da que ya he tenido 
algún encontronazo por estas cosas.

>>> En la
>>> ayuda de aggregate te cuentan como conseguir resultados de varias
>>> funciones a la vez.
>>
>> Pues he repasado toda la ayuda y, la verdad, no he visto nada.
>
> Tienes razón, está explicado en algún ejemplo de la lista R-help, no en
> la ayuda de la función. Prueba con esto:
>
> foo<- function(x,...){
>    cbind(median(x),  mean(x),  sd(x))
>    }
>
> aggregate(cbind(vel1,  vel2) ~ est(meses) +  dir,  FUN = foo,  data =
> vientos)

Algo así pensé yo.

> Saludos.
>
> Oscar.

Muchas gracias por las explicaciones. A pesar de haber revisado bastante 
documentación (Paradis, Saez Castillo, Arriaza Gómez et al, Crawley y 
algunos otros) todavía no me hago con algunas cosas de R, así que, por 
favor, perdonadme si pregunto alguna obviedad.

De nuevo, gracias.

Salud y Revolución.

Lobo.
-- 
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org



Más información sobre la lista de distribución R-help-es