2015-01-23 4 views
1

꽤 빠른 것 같다 이런 식으로 파일을 읽고있다 :R의 lapply 출력에서 ​​특정 파일을 얻는 방법은 무엇입니까?

dirPath = paste0("D:/test") 
setwd(dirPath) 
SF <- list.files(recursive=T, pattern=paste(".csv"), full.names=TRUE) 
myfiles = lapply(SF, fread) 

SF는 다음과 같은 데이터를 반환

./SubFolderA/1.csv 
./SubFolderA/2.csv 
./SubFolderA/3.csv 

./SubFolderB/1.csv 
./SubFolderB/2.csv 
./SubFolderB/3.csv 

그래서, 나는 각 하위 폴더 안에 3 개 CSV 파일과 두 개의 하위 폴더가 있습니다. CSV 파일의 수는 항상 하위 폴더에서 동일합니다.

질문 : myfiles이 주어지면 SubFolderB 내부에있는 CSV 파일을 어떻게 선택합니까? 이 하위 폴더의 1.csv, 2.csv 및 3.csv에 개별적으로 액세스해야합니다.

+0

@ MrFlickr : 감사합니다. 또한, 제가 방금 알아 낸 또 다른 문제는 하위 파일 A에 40 개의 파일이 있고 1.csv, 2.csv, ... 40.csv라고 가정 해 봅시다. 이 CSV 파일은 다음 순서로 myfiles에 저장됩니다. 1,10,11,12,2,21,22,3,31,32 등 1,2,3 등으로 순서를 지정할 수있는 방법이 있습니까? ? 그렇지 않은 경우 올바른 순서로 파일을 처리하기 위해 1,10,11,12,2,21과 같은 색인을 어떻게 생성 할 수 있습니까? 내가 알아야 할 것은, 예. 두 번째 요소는 2.csv (또는 10.csv)입니다. –

+0

@MrFlick : 많은 감사합니다! 왜 대답을 게시하지 않습니까? 단지 의견을 말하십시오 –

+0

나는 문제가 무엇인지 짐작하거나 적절한 답을 입력 할 시간이 없다고 생각할 때 의견을 사용하지만 OP에 올바른 방향으로 한 점을 제공 할 수 있습니다. 내 의견이 원래 질문을 완전히 만족 시킨다면 대답으로 옮길 것입니다. – MrFlick

답변

2

list.files()은 문자 벡터를 반환하기 때문에 grep과 같은 함수를 사용하여 목록의 특정 값을 검색 할 수 있습니다. 당신이 "SubFolderB"에있는 파일을 찾으려면 (방금 다시 실행하려면 list.files()을 그 디렉토리에 원하지 않는) 경우, 그 다음이 파일이 있다고 가정하는 정말 좋은 생각이 아니다

foldB <- grep("/SubFolderB/", SF, value=T) 
foldB 
# [1] "./SubFolderB/1.csv" "./SubFolderB/2.csv" "./SubFolderB/3.csv" 

을 수행 할 수 있습니다 특정 순서로 반송됩니다. 따라서 각 파일의 "ID"를 알고 싶다면 파일 이름 자체에서 해당 정보를 구문 분석하는 것이 좋습니다. 예를

gsub("\\.[^.]*$","",basename(foldB)) 
# [1] "1" "2" "3" 

위해 우리는 폴더 정보를 제거 basename()를 사용하여, 우리는 파일 확장자를 제거 gsub()를 사용합니다.

관련 문제