2012-01-20 29 views
25

Quiero dividir un marco de datos grande en una lista de marcos de datos de acuerdo con los valores en dos columnas. Luego deseo aplicar una transformación de datos común en todos los marcos de datos (transformación de retardo) en la lista resultante. Soy consciente del comando dividir pero solo puedo hacer que funcione en una columna de datos a la vez.División de dataframe utilizando dos columnas de datos y aplicar transformación común en la lista de marcos de datos resultantes

Respuesta

6

¿qué tal ésta:

library(plyr) 
ddply(df, .(category1, category2), summarize, value1 = lag(value1), value2=lag(value2)) 

parece como un trabajo excelente para plyr paquete y ddply() función. Si aún hay preguntas abiertas, proporcione algunos datos de muestra. La división debe trabajar en varias columnas, así:

df<- data.frame(value=rnorm(100), class1=factor(rep(c('a','b'), each=50)), class2=factor(rep(c('1','2'), 50))) 
g <- c(factor(df$class1), factor(df$class2)) 
split(df$value, g) 
+0

Gracias por las respuestas! Descubrí que necesitaba poner las variables divididas en una lista y que se ocupaba del problema de "división" usando dos vars. Lea sobre el paquete plyr y de hecho es poderoso. Sin embargo, no puedo hacer que haga lo que quiero. Intenté este comando: llply (1: length (List), function (i) {temp <-List [[i]] $ a; List [[i]] $ b <-append (head (temp, -1), na, after = 0)}) y esperaba encontrar una nueva variable 'b' en cada dataframe contenido en 'List'. El comando imprime la lista de resultados [[i]] $ b en la pantalla. ¿Qué he entendido mal? – user1160760

38

Es necesario poner todos los factores que desea dividir por en una lista, por ejemplo:

split(mtcars,list(mtcars$cyl,mtcars$gear)) 

continuación, puede utilizar lapply en esto para hacer qué más quieres hacer

Cuestiones relacionadas