2011-08-14 38 views
15

Tôi có một khung dữ liệu gồm 400'000 hàng và khoảng 50 cột. Vì khung dữ liệu này quá lớn nên việc tính toán thuế quá mức để làm việc. Tôi muốn chia dữ liệu này thành các khung dữ liệu nhỏ hơn, sau đó tôi sẽ chạy các hàm tôi muốn chạy và sau đó lắp ráp lại khung dữ liệu ở cuối.Chia nhỏ một khung dữ liệu theo số hàng

Không có biến nhóm mà tôi muốn sử dụng để chia nhỏ khung dữ liệu này. Tôi chỉ muốn chia nó ra theo số hàng. Ví dụ, tôi muốn chia bảng 400'000 hàng này thành các khung dữ liệu 400 1'000 hàng. Tôi có thể làm như thế nào?

Trả lời

20

Tạo biến nhóm của riêng bạn.

d <- split(my_data_frame,rep(1:400,each=1000)) 

Bạn cũng nên xem xét các ddply chức năng từ gói plyr, hoặc group_by() chức năng từ dplyr.

chỉnh sửa cho ngắn gọn, sau nhận xét của Hadley.

Nếu bạn không biết bao nhiêu hàng đang trong khung dữ liệu, hoặc nếu khung dữ liệu có thể là một thời gian không đồng đều của kích thước đoạn mong muốn của bạn, bạn có thể làm

chunk <- 1000 
n <- nrow(my_data_frame) 
r <- rep(1:ceiling(n/chunk),each=chunk)[1:n] 
d <- split(my_data_frame,r) 

Bạn cũng có thể sử dụng

r <- ggplot2::cut_width(1:n,chunk,boundary=0) 

Đối với người đọc trong tương lai, các phương pháp dựa trên gói dplyrdata.table có thể sẽ nhanh hơn nhiều để thực hiện các hoạt động theo nhóm trên khung dữ liệu.

+0

cảm ơn! hoạt động tuyệt vời! Và có, tôi sẽ xem xét các gói plyr vì nó có vẻ rất hữu ích. – Pascal

+0

Tại sao bạn sử dụng 'split.data.frame' chứ không phải' split'? Và bạn không cần phải ép buộc biến nhóm thành một yếu tố. – hadley

+0

không chắc chắn liệu những lời buộc tội/công văn có hiệu quả hay không, và quá lười biếng để dành thời gian để kiểm tra. cảm ơn. –

Các vấn đề liên quan