2011-12-07 3 views
5

텍스트 파일로 매우 긴 전화 로그가 있는데이 파일을 R로 읽으려고했지만 실제로 작동하지 않습니다. 텍스트는 구조를 가지고 있지만 테이블이 아닙니다. readlines도 아닌 아주 적합한 각각의 레코드가 복수 라인으로 구성되어데이터가 테이블에 없을 때 R에 텍스트 파일을 읽는 방법

  1. 을 다음 구조이다
  2. 각 레코드의 각 행은 어떤 레코드가 두 번째 필드
  3. 후 추가 필드를 개별 필드
  4. 각 새 레코드는 빈 줄로 표시됩니다.

    하나는 기록이 "\ n \ 없음"에 의해 및 필드 (또는 열) 여기

은 예입니다 의해 분리 "\ n"되었다는 것을 분리하는 것이 지정한 수 있다면 readLines 또는 scan은 일한 것

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:56 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:58 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 412552999 x 4999 
    bump phone line 4125527777 
    datetime 2011110516 12:59 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    bump phone line 4125527777 
    datetime 2011110516 13:51 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 14:56 
    blay blay blah who knows what 

R에서 어떻게 할 수 있습니까? 스캔, 붙여 넣기, strsplit으로 트릭을 시도했지만 서클에서 돌고 있습니다. 같지 않은 수의 요소를 처리 할 수 ​​있으므로 목록에 넣어야 할 수도 있습니다. 나는 모든 레코드가 동일한 수의 필드를 갖도록하고 하나의 필드가없는 레코드 (여기서는 범프 전화라고 함)에 대해 해당 필드의 값으로 NA를 갖기를 원합니다. 시작하기 만하면 도움을받을 수 있습니다. 거기에서 나는 놀 수 있고 장난감이 될 수있다.

답변

14

scan 함수에서 multi.line = TRUE 일 때 레코드는 두 개의 EOL로 끝나야합니다. 나는 당신의 파일 주위 textConnection으로 이런 짓을하지만, 당신은 유효한 파일 이름을 사용합니다 :

inp <- scan(textConnection(txt), multi.line=TRUE, 
      what=list(place="character", tline1="character", 
      cline1="character", cline2 ="character", cline3="character"), sep="\n") 
Read 5 records 
> str(as.data.frame(inp)) 
'data.frame': 5 obs. of 5 variables: 
$ place : Factor w/ 1 level "TheInstitute 5467": 1 1 1 1 1 
$ tline1: Factor w/ 2 levels " telephone line 4125526987 x 4567",..: 1 1 2 1 1 
$ cline1: Factor w/ 4 levels " bump phone line 4125527777",..: 2 3 1 1 4 
$ cline2: Factor w/ 4 levels " blay blay blah who knows what",..: 2 1 3 4 1 
$ cline3: Factor w/ 3 levels ""," blay blay blah who knows what",..: 1 1 2 3 1 
> as.data.frame(inp) 
       place        tline1 
1 TheInstitute 5467 telephone line 4125526987 x 4567 
2 TheInstitute 5467 telephone line 4125526987 x 4567 
3 TheInstitute 5467 telephone line 412552999 x 4999 
4 TheInstitute 5467 telephone line 4125526987 x 4567 
5 TheInstitute 5467 telephone line 4125526987 x 4567 
         cline1 
1 datetime 2011110516 12:56 
2 datetime 2011110516 12:58 
3 bump phone line 4125527777 
4 bump phone line 4125527777 
5 datetime 2011110516 14:56 
                  cline2 
1 blay blay blah who knows what, but anyway it may have a comma 
2         blay blay blah who knows what 
3          datetime 2011110516 12:59 
4          datetime 2011110516 13:51 
5         blay blay blah who knows what 
                  cline3 
1                 
2                 
3         blay blay blah who knows what 
4 blay blay blah who knows what, but anyway it may have a comma 
5                 
+0

일이 아주 좋은 ... – Andrie

+0

을 ...하지만 난 당신에게 더 분할'place','tline' 필요 추측 와'cline1'을 서브 컬럼으로? – Tommy

+0

다음 작업은 'datetime'과 'bump lines'데이터를 돌아 다니는 것이지만, 질문자가 주석을 구문 분석하도록 요구하지는 않는다고 생각합니다. –

관련 문제