На веб-сайте Хэдли Уикхэма есть несколько ресурсов для пакета (в настоящее время называется reshape2
), включая ссылку на статью о пакете в журнале статистического программного обеспечения.
Вот краткий пример из бумаги:
> 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
Отметим, что данные в широкой форме. Чтобы перейти к длинной форме, мы сделаем smiths
кадр данных расплавленным :
> 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
Обратите внимание, как melt()
в качестве идентификатора выбрана одна из переменных, но мы можем явно указать, какой использовать через аргумент '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
Вот еще один пример из ?cast
:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
Если мы храним расплавленный фрейм данных, мы можем привести его в другие формы. В новой версии reshape
(называется reshape2
) есть функции acast()
и dcast()
возвращая массив типа (массив, матрица, вектор) результат или кадр данных , соответственно. Эти функции также выполняют функцию агрегирования (например mean()
) для предоставления сводных данных в расплавленном виде. Например, следуя приведенному выше примеру качества воздуха, мы можем в широком формате сгенерировать среднемесячные значения для переменных в наборе данных:
> 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
На самом деле есть только две основные функции reshape2
: melt()
and acast()
и dcast()
сопряжение. Посмотрите примеры на страницах справки для этих двух функций, посетите веб-сайт Хэдли (ссылка выше) и посмотрите на статью, которую я упомянул. Это должно начать вас.
Вы могли бы также взглянуть на plyr
пакет Хэдли, который делает подобные вещи, reshape2
но разработан, чтобы сделать намного больше помимо этого.