2009-07-23 17 views
15

Tengo datos que salen de un DB de forma normalizada con un campo para año, estado y valor.Convertir datos de muchas filas a muchas columnas

Me gustaría hacer un análisis de los datos y necesito formatearlos donde cada año es un campo y no un registro. Así que me gustaría los datos donde cada registro es un estado y luego hay un campo para cada año y cada el valor para esos campos es el valor para ese año y ese estado.

¿Hay un comando para hacer esto?

por lo que tengo:

State Year Value 
    KY 1998  56 
    KY 1997  78 
    IL 1998  48 
    IL 1997  72 

y quiero:

State 1997_value 1998_value 
    KY   78   56 
    IL   72   48 

Respuesta

18

que desea utilizar la función reshape().

reshape(data, idvar="State", timevar="Year", direction="wide") 
5

Otra opción es utilizar el paquete de remodelación del , creado por el inimitable Hadley Wickham:

library(reshape) 

tuna<-melt(data,id.vars=c("State","Year")) 

cast(tuna,State~Year~variable) 
2

incluso puede combinar las conducciones y fundido en una sola llamada a la función de refundición.

ds <- data.frame(State = c("KY", "KY", "IL", "IL"), 
Year = c(1998, 1997, 1998, 1997), 
Value = c(56, 78, 48, 72)) 

library(reshape) 
recast(ds, State ~ Year, id.var = c("State", "Year")) 
+0

En este caso, los datos ya están en forma fundida, por lo que puede omitir el paso de fusión. – hadley

Cuestiones relacionadas