2011-03-06 23 views
5

Estoy tratando de usar el método ddply para tomar un dataframe con información diversa sobre 3000 películas y luego calcular la media bruta de cada género. Soy nuevo en R, y he leído todas las preguntas aquí relacionadas con ddply, pero todavía no puedo hacerlo bien. Esto es lo que tengo ahora:R: usando ddply para aplicar funciones a subconjuntos de datos

> attach(movies) 
> ddply(movies, Genre, mean(Gross)) 
Error in llply(.data = .data, .fun = .fun, ..., .progress = .progress, : 
.fun is not a function. 

¿Cómo se supone que voy a escribir una función que toma la media de los valores en la columna "bruto" para cada conjunto de películas, agrupados por géneros? Sé que parece una pregunta simple, pero la documentación es realmente confusa para mí, y aún no estoy muy familiarizado con la sintaxis de R.

¿Hay algún otro método además de ddply que lo haga más fácil?

Gracias!

+0

¿ha realizado algún preprocesamiento de los datos? El conjunto de datos de películas no contiene los nombres de columna "Bruto" ni "Género". Hay un conjunto de indicadores binarios que indican los diferentes géneros, y una columna de presupuesto ... http: //had.co.nz/data/movies/ – Chase

+1

Además, no use adjuntar. – hadley

Respuesta

10

Aquí hay un ejemplo usando el conjunto de datos disponible en consejos ggplot2

library(ggplot2); 
mean_tip_by_day = ddply(tips, .(day), summarize, mean_tip = mean(tip/total_bill)) 

Hope esto es útil

+0

¡Muchas gracias, eso funcionó! – LBR

2

Es probable que no necesita plyr para una operación tan simple como eso. tapply() hace el trabajo fácilmente y no necesitará cargar paquetes adicionales. La sintaxis también parece más sencillo que Ramnath de:

tapply(tips$tip, tips$day, mean) 

Tenga en cuenta que plyr es una herramienta fantástica para muchas tareas. Para mí, parece exagerado aquí.

+4

tenga en cuenta que la solución anterior devuelve una lista de uno, mientras que la solución plyr anterior devuelve un data.frame. Puede envolver fácilmente su solución en un 'as.data.frame()'. 'plyr' parece excesivo hasta que empiezas a apreciar lo agradable que es establecer explícitamente la estructura de la entrada y la salida de los objetos en los que operas. – Chase

+0

Buen punto. Pero la pregunta original no especificaba el formato deseado. Tal vez debería haber deducido eso del ddply. – Vincent

Cuestiones relacionadas