2013-07-17 6 views
3

건으로 추측 할 수 있습니다.패턴에 의한 단어의 출현 횟수를 R

XML 파일에서 모든 발생, 해당 행 및 알파와 숫자 만 (문자로 영숫자) 만 포함 된 각 12 자 문자열의 총 발생 횟수를 검색하려고합니다.

예를 들면 : 내 파일이 xmlInput 인 경우 12 문자 영문자 문자열의 모든 발생, 위치 및 총 개수를 검색하고 추출하려고합니다.

예 출력 : 내가 패턴으로 문자열의 모든 항목을 얻을 수 regmatches을 사용할 수, 알고

String  Total Count  Line-Num 
CPXY180D2324 2    132,846 
CPXY180D2131 1    372 
CPCY180D2139 1    133  

. 나는 그것을 위해 아래를 사용 해왔다 : (이것에 대한 귀하의 도움에 감사드립니다).

ProNum12<-regmatches(xmlInput, regexpr("([A-Z0-9]{12})", xmlInput)) 
ProNum12 

regmatches 패턴을 따르는 모든 경기를 알려주세요. 하지만 그것은 패턴이 나타난 곳의 라인 번호를 알려주지 않습니다. grep이 나에게 모든 발생 행 번호를 알려줍니다.

나는 textcnt 라이브러리 Tau 패키지를 사용할 수 있다고 생각했지만 제대로 실행되지 못했습니다. 아마도 그것은 적절한 패키지가 아닐까요?

R에있는 패키지/라이브러리는 패턴과 일치하는 모든 단어를 검색하고 각각의 어커런스 및 리넨 수를 계산합니다. 그런 pacakge가 존재하지 않는 경우에, 나는 어떻게의 위 또는 더 나은 것의 이것을 사용하여 할 수있는 아이디어?

+1

당신이 코드를 포맷 게시물을 편집시겠습니까? 또한'quoting' (틱 마크'') R 명령어를 사용하면 읽기가 더 쉽습니다. 예 : Grep 대신'grep'. – Arun

+0

수정 됨. 바라기를, 지금 더 낫습니까? 감사! – BRZ

+1

니스, 당신이 보여준 결과물을 줄 수있는 문자열을 우리에게 줄 수 있다면 더 좋을 것입니다. – Arun

답변

3

데이터를 보지 않고 진행 방법에 대한 제안을하기가 어렵습니다. 다음은 자신의 솔루션을 찾는 데 도움이되는 일반 문자열을 사용한 예입니다. (아마 당신의 데이터처럼 아무것도 보지 않는다)

첫째, 일부 샘플 데이터 :

x <- c("Some text with a strange CPXY180D2324 string stuck in it.", 
     "Some more text with CPXY180D2131 strange strings CPCY180D2139 stuck in it.", 
     "Even more text with strings that CPXY180D2131 don't make much sense.", 
     "I'm CPXY180D2324 tired CPXY180D2324 of CPXY180D2324 text with CPXY180D2131 strange strings CPCY180D2139 stuck in it.") 

우리는이 공백으로 분할 할 수 있습니다. 이것은 실제 문제에 적합하지 않을 수 있습니다 다른 영역입니다, 그러나 다시, 이것은 당신이 시작하는 데 도움이 단지 (또는 경우가 있으므로 다른 사람이, 더 나은 해답을 제공하는 데 도움이됩니다.)

x2 <- strsplit(x, " ") 

검색 정규식 패턴과 일치하는 값에 대한 데이터를 분할합니다. 줄 번호와 일치하는 문자열을 포함하는 data.frame을 만듭니다.

temp <- do.call(rbind, lapply(seq_along(x2), function(y) { 
    data.frame(line = y, 
      value = grep("([A-Z0-9]{12})", x2[[y]], 
          value = TRUE)) 
})) 
temp 
# line  value 
# 1 1 CPXY180D2324 
# 2 2 CPXY180D2131 
# 3 2 CPCY180D2139 
# 4 3 CPXY180D2131 
# 5 4 CPXY180D2324 
# 6 4 CPXY180D2324 
# 7 4 CPXY180D2324 
# 8 4 CPXY180D2131 
# 9 4 CPCY180D2139 

data.frame 행 번호 및 개수를 만듭니다.

with(temp, data.frame(
    lines = tapply(line, value, paste, collapse = ", "), 
    count = tapply(line, value, length))) 
#     lines count 
# CPXY180D2324 1, 4, 4, 4  4 
# CPCY180D2139  2, 4  2 
# CPXY180D2131 2, 3, 4  3 

어쨌든, 이것은 순전히 추측 (그리고 나 .... 시간을 죽이는)

+0

늦은 응답에 대해 죄송합니다. 제 입력 파일은 xml 파일이고 어둠 속에서 이러한 문자열로 낚시를합니다. 그래서, 내가 캠을 들고있는 해결책은 극도로 완고한 원형이다.그러나 작품 : 당신이 내 regmatches -> sqldf -> 적용 솔루션보다 훨씬 더 우아하다고 확신합니다. 둘 다 테스트하고 변경합니다. 도움을 주셔서 감사합니다 - simak – BRZ

+2

@simak, 나는 낚시가 회사와 더 재미 있다고 들었으므로 작업하는 XML 파일의 몇 줄로 질문을 업데이트하고 다른 낚시꾼이 더 나은 접근 방법을 찾을 수 있는지 확인하십시오. – A5C1D2H2I1M1N2O1R2T1

관련 문제