Existem vários recursos no site de Hadley Wickham para o pacote (agora chamado reshape2
), incluindo um link para um artigo sobre o pacote no Journal of Statistical Software.
Aqui está um breve exemplo do artigo:
> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
subject time age weight height
1 John Smith 1 33 90 1.87
2 Mary Smith 1 NA NA 1.54
Observamos que os dados estão na forma ampla. Para ir para o formato longo, tornamos o smiths
quadro de dados fundido :
> melt(smiths)
Using subject as id variables
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
Observe como melt()
escolheu uma das variáveis como o ID, mas podemos declarar explicitamente qual usar via argumento 'id'
:
> melt(smiths, id = "subject")
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
Aqui está outro exemplo de ?cast
:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
Se armazenarmos o quadro de dados fundido, podemos converter em outras formas. Na nova versão do reshape
(chamado reshape2
), existem funções acast()
e dcast()
retornando um resultado do tipo matriz (matriz, matriz, vetor) ou um quadro de dados, respectivamente. Essas funções também assumem uma função agregadora (por exemplo mean()
) para fornecer resumos de dados na forma fundida. Por exemplo, seguindo o exemplo de Qualidade do ar acima, podemos gerar, de forma ampla, valores médios mensais para as variáveis no conjunto de dados:
> dcast(aqm, month ~ variable, mean)
month ozone solar.r wind temp
1 5 23.61538 181.2963 11.622581 65.54839
2 6 29.44444 190.1667 10.266667 79.10000
3 7 59.11538 216.4839 8.941935 83.90323
4 8 59.96154 171.8571 8.793548 83.96774
5 9 31.44828 167.4333 10.180000 76.90000
Há realmente apenas duas funções principais reshape2
: melt()
e o acast()
e dcast()
emparelhamento. Veja os exemplos nas páginas de ajuda para essas duas funções, consulte o site da Hadley (link acima) e o artigo que mencionei. Isso deve começar.
Você também pode examinar o plyr
pacote de Hadley, que faz coisas semelhantes, reshape2
mas foi projetado para fazer muito mais além disso.