Tôi đang cố gắng định lại khung dữ liệu trong R và có vẻ như có vấn đề khi sử dụng các cách được khuyến nghị làm như vậy. Khung dữ liệu có cấu trúc sau:Hiệu suất R với định dạng lại dữ liệu
ID DATE1 DATE2 VALTYPE VALUE
'abcd1233' 2009-11-12 2009-12-23 'TYPE1' 123.45
...
VALTYPE
là một chuỗi và là một yếu tố chỉ có 2 giá trị (nói TYPE1
và TYPE2
). Tôi cần phải biến nó thành khung sau dữ liệu ("rộng" transpose) dựa trên ID chung ngày:
ID DATE1 DATE2 VALUE.TYPE1 VALUE.TYPE2
'abcd1233' 2009-11-12 2009-12-23 123.45 NA
...
khung Dữ liệu có hơn 4.500.000 quan sát (mặc dù khoảng 70% VALUE
s là NA
). Máy này là một máy trạm Linux dựa trên Intel với 4Gb RAM. Tải dữ liệu (từ một tập tin Rdata nén) vào một quá trình R tươi làm cho nó phát triển đến khoảng 250Mb mà rõ ràng lá rất nhiều không gian để định hình lại.
Đây là những kinh nghiệm của tôi cho đến nay:
Sử dụng vani
reshape()
phương pháp:tbl2 < - reshape (tbl, hướng = "rộng", idvar = c ("ID", "DATE1 "," DATE2 "), timevar =" VALTYPE ");
KẾT QUẢ: Error: cannot allocate vector of size 4.8 Gb
Sử dụng
cast()
phương phápreshape
gói:tbl2 < - cast (tbl, ID + DATE1 + DATE2 ~ VALTYPE);
KẾT QUẢ: Quá trình R tiêu thụ tất cả RAM không có kết thúc. Đã phải giết quá trình cuối cùng.
Sử dụng
by()
vàmerge()
:sp < - bởi (tbl [c (1,2,3,5)], tbl $ VALTYPE, function (x) x); tbl < - hợp nhất (sp [["TYPE1"]], sp [["TYPE2"]], bởi = c ("ID", "DATE1", "DATE2"), tất cả = TRUE, sort = TRUE) ;
KẾT QUẢ: hoạt động tốt, mặc dù điều này không phải là rất thanh lịch và dễ dàng (nghĩa là nó sẽ bị hỏng nếu có thêm loại).
Để thêm sự xúc phạm đến thương tích, hoạt động được đề cập có thể đạt được một cách trivially trong khoảng 3 dòng AWK hoặc Perl (và hầu như không sử dụng RAM). Vì vậy, câu hỏi đặt ra là: cách tốt hơn để thực hiện thao tác này trong R bằng cách sử dụng các phương pháp được đề xuất mà không tốn tất cả RAM có sẵn là gì?
Không, bằng cách sử dụng 'recast()' cho thấy cùng một vấn đề như với phương thức 'cast()' ở trên - quá trình đã vượt quá 5 Gb bộ nhớ ảo vì vậy tôi đã giết nó sau khoảng 1 giờ. –