Có một số tài nguyên trên trang web của Hadley Wickham cho gói (hiện được gọi là reshape2
), bao gồm một liên kết đến một tờ giấy trên gói trong Tạp chí Phần mềm Thống kê.
Dưới đây là một ví dụ ngắn gọn từ bài báo:
> 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
Chúng tôi lưu ý rằng dữ liệu ở dạng rộng. Để chuyển sang dạng dài, chúng tôi làm cho smiths
khung dữ liệu bị nóng chảy :
> 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
Lưu ý cách melt()
chọn một trong các biến làm id, nhưng chúng ta có thể nói rõ ràng nên sử dụng thông qua đối số nào '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
Đây là một ví dụ khác từ ?cast
:
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
Nếu chúng ta lưu trữ các khung dữ liệu nóng chảy, chúng ta có thể đúc thành các hình thức khác. Trong phiên bản mới của reshape
(được gọi reshape2
), có các hàm acast()
và dcast()
trả về kết quả giống như mảng (mảng, ma trận, vectơ) hoặc khung dữ liệu tương ứng. Các hàm này cũng có một hàm tổng hợp (ví dụ mean()
) để cung cấp tóm tắt dữ liệu ở dạng nóng chảy. Ví dụ: tiếp theo từ ví dụ về Chất lượng không khí ở trên, chúng ta có thể tạo, ở dạng rộng, giá trị trung bình hàng tháng cho các biến trong tập dữ liệu:
> 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
Có thực sự chỉ có hai chức năng chính trong reshape2
: melt()
và acast()
và dcast()
ghép nối. Nhìn vào các ví dụ trong các trang trợ giúp cho hai chức năng này, xem trang web của Hadley (liên kết ở trên) và xem bài báo tôi đã đề cập. Điều đó sẽ giúp bạn bắt đầu.
Bạn cũng có thể xem xét plyr
gói của Hadley có chức năng tương tự reshape2
nhưng được thiết kế để làm nhiều hơn thế nữa.