una titulo tendencia parabola pairs lĂ­nea linea hacer graficar grafica como columna agregar r dataframe aggregate

titulo - r grafica



Convertir un objeto "by" en un marco de datos en R (5)

Considere usar ddply en el paquete plyr en lugar de hacerlo por. Maneja el trabajo de agregar la columna a su marco de datos.

Estoy usando la función "by" en R para cortar un cuadro de datos y aplicar una función a diferentes partes, como esto:

pairwise.compare <- function(x) { Nright <- ... Nwrong <- ... Ntied <- ... return(c(Nright=Nright, Nwrong=Nwrong, Ntied=Ntied)) } Z.by <- by(rankings, INDICES=list(rankings$Rater, rankings$Class), FUN=pairwise.compare)

El resultado (Z.by) se ve algo como esto:

: 4 : 357 Nright Nwrong Ntied 3 0 0 ------------------------------------------------------------ : 8 : 357 NULL ------------------------------------------------------------ : 10 : 470 Nright Nwrong Ntied 3 4 1 ------------------------------------------------------------ : 11 : 470 Nright Nwrong Ntied 12 4 1

Lo que me gustaría es que este resultado se convierta en un marco de datos (con las entradas NULL no presentes) para que se vea así:

Rater Class Nright Nwrong Ntied 1 4 357 3 0 0 2 10 470 3 4 1 3 11 470 12 4 1

¿Cómo puedo hacer eso?


Esto amplía la solución de Shane de usar rbind (), pero también agrega columnas que identifican grupos y elimina grupos NULOS, dos características que se solicitaron en la pregunta. Al usar las funciones del paquete base, no se requieren otras dependencias, por ejemplo, plyr.

simplify_by_output = function(by_output) { null_ind = unlist(lapply(by_output, is.null)) # by() returns NULL for combinations of grouping variables for which there are no data. rbind() ignores those, so you have to keep track of them. by_df = do.call(rbind, by_output) # Combine the results into a data frame. return(cbind(expand.grid(dimnames(by_output))[!null_ind, ], by_df)) # Add columns identifying groups, discarding names of groups for which no data exist. }


Hilo antiguo, pero para cualquiera que busque este tema:

analysis = by(...) data.frame(t(vapply(analysis,unlist,unlist(analysis[[1]]))))

unlist() tomará un elemento de una salida by() (en este caso, analysis ) y lo expresará como un vector nombrado. vapply() anula la lista de todos los elementos de analysis y genera el resultado. Requiere un argumento ficticio para saber el tipo de salida, que es para lo que está disponible el analysis[[1]] . Es posible que deba agregar una verificación de que el análisis no está vacío si eso es posible. Cada salida será una columna, por lo que t() transpone a la orientación deseada donde cada entrada de análisis se convierte en una fila.


La función by devuelve una lista, por lo que puede hacer algo como esto:

data.frame(do.call("rbind", by(x, column, mean)))


yo lo haría

x = by(data, list(data$x, data$y), function(d) whatever(d)) array(x, dim(x), dimnames(x))