2013-11-24 19 views
5

Tôi có tệp csv 3 GB. Nó quá lớn để tải vào R trên máy tính của tôi. Thay vào đó, tôi muốn tải một mẫu các hàng (ví dụ: 1000) mà không tải toàn bộ tập dữ liệu.Mẫu tệp CSV quá lớn để tải vào R?

Điều này có khả thi không? Tôi dường như không thể tìm thấy câu trả lời ở đâu cả.

+6

Xem ví dụ 6e trên trang chủ sqldf: http://sqldf.googlecode.com để có giải pháp một dòng. –

+0

@ G.Gothendieck: Đánh giá từ người quản lý công việc của tôi toàn bộ tập tin được tải vào RAM – Raffael

+0

Vâng, tôi đã suy nghĩ về cách nó có thể hoạt động trong R. Điều tôi muốn nói với R để chọn lọc read.csv các hàng nhất định của một tệp csv. – Anton

Trả lời

7

Nếu bạn không muốn trả hàng nghìn đô la cho cuộc cách mạng R để bạn có thể tải/phân tích dữ liệu của mình trong một lần, sớm hay muộn, bạn cần tìm ra cách để lấy mẫu dữ liệu.

Và bước đó là dễ dàng hơn để xảy ra bên ngoài R.

(1) Linux Shell:

Giả sử dữ liệu của bạn rơi vào một định dạng phù hợp. Mỗi hàng là một bản ghi. Bạn có thể làm:

sort -R data | head -n 1000 >data.sample 

này sẽ ngẫu nhiên sắp xếp tất cả các hàng và nhận được 1000 hàng đầu tiên vào một file riêng biệt - data.sample

(2) Nếu dữ liệu không phải là đủ nhỏ để phù hợp với bộ nhớ .

Ngoài ra còn có giải pháp để sử dụng cơ sở dữ liệu để lưu trữ dữ liệu. Ví dụ, tôi có nhiều bảng được lưu trữ trong cơ sở dữ liệu MySQL trong một định dạng bảng đẹp. Tôi có thể làm mẫu bằng cách thực hiện:

select * from tablename order by rand() limit 1000 

Bạn có thể dễ dàng giao tiếp giữa MySQL và R bằng RMySQL và bạn có thể lập chỉ mục cột để đảm bảo tốc độ truy vấn. Ngoài ra, bạn có thể xác minh độ lệch trung bình hoặc chuẩn của toàn bộ tập dữ liệu so với mẫu của bạn nếu bạn muốn xem xét sức mạnh của cơ sở dữ liệu.

Đây là hai cách được sử dụng phổ biến nhất dựa trên kinh nghiệm của tôi để xử lý dữ liệu 'lớn'.

+0

+1 cho ý tưởng tổng thể, nhưng tôi không biết phiên bản 'sắp xếp' bạn sử dụng có tùy chọn' -R'. – flodel

+0

@flodel http://stackoverflow.com/questions/886237/how-can-i-randomize-the-lines-in-a-file-using-a-standard-tools-on-redhat-linux –

+1

@flodel it là mã bash, không phải mã R. –

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