Resumen de tablas de datos a partir de datos amplios.
Estoy tratando de encontrar formas perezosas / fáciles de crear tablas de resumen /data.frames
de anchodata.frames
. Suponga un siguiente data.frame, pero con muchas más columnas, de modo que la especificación de los nombres de las columnas lleva mucho tiempo:
set.seed(2)
x <- data.frame(Rep = rep(1:3, 4), Temp = c(rep(10,6), rep(20,6)),
pH = rep(c(rep(8.1, 3), rep(7.6, 3)), 2),
Var1 = rnorm(12, 5,2), Var2 = c(rnorm(6,4,1), rnorm(6,3,5)),
Var3 = rt(12, 20))
x[1:3] <- as.data.frame(apply(x[1:3], 2, function(x) as.factor(x)))
Ahora puedo calcular estadísticas de resumen conplyr
:
(mu <- ddply(x, .(Temp, pH), numcolwise(mean)))
(std <- ddply(x, .(Temp, pH), numcolwise(sd)))
(n <- ddply(x, .(Temp, pH), numcolwise(length)))
Pero no puedo averiguar cómo aplicar todas estas funciones al mismo tiempo:
ddply(x, .(Temp, pH), numcolwise(mean, sd, length))
Por supuesto, podría combinar varias tablas de datos de resumen, pero esta no sería una forma "perezosa / fácil" de hacer esto. Estoy buscando algo general que podría aplicar en muchos casos. Algo así, con la excepción de que debería ser posible generar con una sola función:
xx <- merge(mu, std, by = c("Temp", "pH"), sotr = F)
colnames(xx) <- gsub("x", "mean", colnames(xx))
colnames(xx) <- gsub("y", "sd", colnames(xx))
xx <- merge(xx, n, by = c("Temp", "pH"), sotr = F)
colnames(xx)[(ncol(xx)-2):ncol(xx)] <-
paste0(colnames(xx)[(ncol(xx)-2):ncol(xx)], ".length")
xx <- xx[c("Temp", "pH", grep("Var1", colnames(xx), value = T),
grep("Var2", colnames(xx), value = T),
grep("Var3", colnames(xx), value = T))]
xx
Temp pH Var1.mean Var1.sd Var1.length Var2.mean Var2.sd Var2.length Var3.mean Var3.sd Var3.length
1 10 7.6 4.281195 1.352194 3 3.534447 1.652884 3 0.1529616 1.076276 3
2 10 8.1 5.583853 2.491672 3 4.116622 1.478286 3 1.1611944 1.081301 3
3 20 7.6 5.840411 1.120549 3 6.907273 8.628021 3 0.1301949 1.764201 3
4 20 8.1 6.635154 2.232262 3 8.893188 4.208087 3 0.5509202 1.187431 3
¿Es esto posible hacer enR ¿actualmente? Cualquier consejo sería muy apreciado.