2012-09-02 4 views
6

readLines을 사용하여 텍스트 형식의 데이터 파일을 읽습니다. 첫 번째 '열'은 내가 필요로하지 않는 복잡한 텍스트입니다. 다음 열에는 필요한 데이터가 들어 있습니다. 첫 번째 '열'과 데이터는 콜론 (:)으로 구분됩니다. 첫 번째 콜론에서 각 행을 분할하고 결과 텍스트 문자열을 삭제하여 데이터 만 유지하려고합니다.첫 번째 콜론에서 문자열 분할

다음은 데이터 파일의 예입니다. 한 가지 복잡한 문제는 한 줄의 데이터에 여러 개의 콜론이 포함되어 있다는 것입니다. 그 라인은 어느 시점에서 내 헤더가 될 수 있습니다. 따라서 첫 번째 콜론에서 모든 콜론을 분리해서는 안됩니다.

my.data <- "first string of text..: aa : bb : cc 
      next string ........ : 2 0 2 
      third string......1990: 7 6 5 
      last string   : 4 2 3" 

my.data2 <- readLines(textConnection(my.data)) 
my.data2 

나는 시도 코드는 여기에 제시된 : 여기

Split on first comma in string

를 실행 한 다음, 첫 번째 링크에서

R: removing the last three dots from a string

코드는 위의 첫 번째 대장에서만 분할 보인다 첫 번째 행 두 번째 링크의 코드는 내가 원하는 것을 수행 할 것이지만 지금까지는 성공적으로 수정하기에는 너무 복잡합니다. 여기

내가 얻을 수 있도록 노력하겠습니다 데이터, 나는 단순히 매우 간단한 gsub 문을 사용하여 빈 공백으로 첫 번째 행의 나머지 콜론을 대체 할 수있는 지점에있다 :

이 중복 인 경우
aa : bb : cc 
    2 0 2 
    7 6 5 
    4 2 3 

죄송합니다 내가 찾지 못한 게시물에 대해 조언이나 도움을 주셔서 감사합니다.

답변

15

gsub("^[^:]+:\\s*", "", my.data2) 

(본질적를 제거) 문자열의 처음부터 시작하고 첫 번째 콜론과 추가 공간을 포함한까지 모든 것을 잡아 아무것도 그것을 대체 할 다음 당신이 만약 돈 '이 t은 원래 정규 표현식이 무엇을하고 있는지에 대한 몇 가지 설명을 위해

gsub("^[^:]+:", "", my.data2) 

을 할 수있는 공간을 제거 할.처음에 시작 :

^를이는이 콜론이 하나 앞의 문자와 일치 말한다

+ 아닌 모든 문자를 나타냅니다

[^:] 문자열의 시작 부분에서 일치하는 항목을 찾을 수에 말한다 더 시간이 실제로 대장과 일치하는 것입니다

: (그래서 가능한 한 많은 비 콜론 문자와 일치)

\\s이 공백이 0 번 이상이

(그래서 우리는 콜론 뒤에 추가 공백을 제거) 앞의 문자와 일치 말한다

* 일치하는 것은 그래서 우리는 문자열의 시작 부분에서 시작 모두 함께 넣어 가능한 한 많은 콜론이 아닌 문자를 매치 한 다음 첫 번째 콜론 문자와 추가 공백을 가져 와서 모두를 대체합니다 (기본적으로 원하지 않는 모든 정크를 제거함).

+0

답변과 뛰어난 설명을 보내 주셔서 감사합니다. –

+5

+1 설명 –