2016-06-07 3 views
0

R에서이 작업을 시도하고 있지만 Windows 명령 줄도 사용할 수 있습니다.많은 파일을 헤더없이 더 큰 파일에 연결하십시오.

필자는 첫 번째 줄에 헤더가있는 10 개의 큰 파일을 가정 해 보겠습니다. 이 모든 파일을 포함하지만 헤더가없는 단일 파일을 갖고 싶습니다.

가장 빠른 방법은 "copy/b"명령을 사용하여이 모든 파일을 더 큰 파일로 연결 한 다음 SED 소프트웨어를 사용하여 해당 큰 파일에서 헤더 패턴을 찾고 삭제하는 것입니다 그들.

SED가 느리고이 방법이 필요한 모든 컴퓨터에 SED를 설치하고 싶지 않습니다. copy \ b 명령을 사용하여 두 번째 줄에서 더 큰 파일로 붙여 넣을 수 있습니까?

또한 data.table 패키지에서 "fread"로 파일을 메모리로 읽은 다음 write.table을 사용하여 더 큰 파일을 만들기 위해 appending을 사용하는 기술을 수행했습니다. (하지만 write.table은 super super slow이며 data.table의 "fwrite"명령은 CRAN에 아직 없습니다 ... 아직 github에서 개발 중이므로 원하는만큼 안정적이지 않을 수 있습니다 있다).

아무도 제안하지 않았습니까? 당신은 R.이 같은 뭔가를 시도 할 수 있습니다

감사

+0

R로 재현 가능한 코드를 제공하는 것이 좋습니다. 특히 최종 결과의 첫 행으로 헤더를 유지 하시겠습니까? 귀하의 질문에 대한 자세한 내용은 데이터 논쟁 또는 대형 파일에 대한 읽기/쓰기 성능에 관한 것입니까? – pbahr

+0

모든 파일의 헤더가 같은 경우, 큰 파일을 모두'MyList <- lapply()'로 R에있는 목록으로 읽어 들일 수 있습니다. 그런 다음'MyData <- Reduce (function (...) rbind, MyList) '를 사용하여 모두 하나의 데이터 프레임에 넣습니다. 아니면 한 단계에서'MyData <-'줄에'lapply()'를 넣으면됩니다. (이것은 헤더 행을 열 이름으로 사용하여'lapply()'단계에서 데이터 프레임으로 읽는 것을 전제로합니다.) – ulfelder

+0

문제는 단지 쓰기 속도에 있습니다. 파일을 메모리로 읽어 들이기 위해 나는 가능한 최대 속도로 write.table의 느린 속도에 방해가된다. – user1780424

답변

0

다음은 그 일에 대한 RSCRIPT입니다.

cmdArgs<-c("peakListFile.txt") # read a list of all files that you want to concatenate 
peakList<-cmdArgs[1] 
peakFileDF<-read.table(peakList, header=F) # create a df for list file 

tempdf<-matrix(,, ncol=10, dimnames=list(c(), c("V1", "V2", "V3", "V4", "V5","V6", "V7", "V8", "V9", "V10"))) # create an empty df 

for(i in peakFileDF$V1) 
{ 
tmp<-read.delim(i, sep="\t", header=F, stringsAsFactors=F) 
tempdf<-rbind(tmp, tempdf) 
} 
tempdf<-tempdf[rowSums(is.na(tempdf)) != ncol(tempdf),] # Removing the line with NA coming from creation of empty df above 
+0

이것은 내가 원하는 것이 아닙니다. 귀하의 솔루션은 파일 목록을 읽는 것과 같습니다. 다시 말하지만, 나는 그것들을 읽는 것이 아니라 (data.table 패키지를 사용하는 것이 빠름) 지적해야한다. 주로 글쓰기에 관한 내용입니다. 새 파일을 만드는 방법. 나는 메모리로 읽어 들이지 않고 연결의 직접 파일 복사 방법을 사용함으로써 프로세스 속도를 높일 수있는 해킹에 대해 궁금해한다. – user1780424

관련 문제