2015-01-16 7 views
4

R에서 몇 가지 큰 데이터 세트 (10-20GB, .csv에 저장되며 read.csv 함수 사용)를 사용해야하는 일부 분석을하고 있습니다.).큰 .CSV에서 무작위 샘플 가져 오기 및 추출 R

큰 .csv 파일을 다른 데이터 프레임과 병합하고 변환해야하므로 전체 파일을 가져올 컴퓨팅 성능이나 메모리가 없습니다.

누구든지 CSV의 임의의 비율을 가져 오는 방법을 알고 있는지 궁금합니다.

사람들이 전체 파일을 가져온 다음 몇 가지 기능을 사용하여 원본의 샘플 인 다른 데이터 프레임을 만드는 몇 가지 예를 보았습니다. 그러나 다소 집중적이지 않은 것을 기대하고 있습니다.

+3

나는 당신이 데이터베이스에 데이터를 넣어한다고 생각합니다. [이 답변] (http://stackoverflow.com/a/1820610/1412059) 유용 할 수 있습니다. – Roland

+0

Mac (Yosemite)와 PC (Windows 7)를 모두 사용합니다. – RMAkh

+0

하나의 옵션은'awk'와 같은 유닉스 명령 행 도구를 사용하는 것일 수 있습니다. 여기에 대한 좋은 토론이 있습니다 : http://stackoverflow.com/questions/692312/unly-pick-lines-from-a-file-without-slurping-it-unix 'awk'으로 샘플링 한 다음 R로 읽어들입니다. – Statwonk

답변

6

임의의 방법으로 파일을 읽는 데 좋은 R 도구가 없습니다 (어쩌면 확장자가 read.table 또는 fread (data.table 패키지) 일 수 있음).

perl을 사용하면이 작업을 쉽게 수행 할 수 있습니다. 여기

xx= system(paste("perl -ne 'print if (rand() < .01)'",big_file),intern=TRUE) 

을 나는 system를 사용하는 R에서 호출하고 예를 들어, 임의의 방법으로 파일의 1 %를 읽고, 당신은이 작업을 수행 할 수 있습니다. xx는 이제 파일의 1 % 만 포함합니다.

당신은 기능에 모든 것을 포장 할 수 있습니다

read_partial_rand <- 
    function(big_file,percent){ 
    cmd <- paste0("perl -ne 'print if (rand() < ",percent,")'") 
    cmd <- paste(cmd,big_file) 
    system(cmd,intern=TRUE) 
    } 
+0

'running command'perl -ne 'print if (rand() <0.04) 'train.csv'의 상태는 255입니다. –

관련 문제