2013-08-21 4 views
0

알았어 - 아마도 이것이 더 좋은 예입니다. 나는이 데이터에 대한 정규 표현식을 만드는 방법이 아닌 정규식 내에서 변수를 참조하는 방법에 대한 지침/참조를 찾고 있습니다.R 정규식 내에서 변수 사용

어떻게 변수 값을 사용하여 다음 변수를 정규 표현할 수 있습니까? 속도의

library(plyr)  
library(tm) 
library(stringr) 
library(gsubfn) 

데이터 집합

d1$sub1 <- as.character(lapply((strapply(d1$sub,"((?<=LEFT CAROTID STENOSIS:).{5,}?(?=(\\(|COMMON)))", perl=TRUE)), unique)) 
d1$sub1 
[1] " (50-69)APPROXIMATELY 50-55% "      
[2] " (50-69)APPROXIMATELY 60-70% "      
[3] " (40-60)APPROXIMATELY 40% INCOMPLETE SCAN SEE NOTES " 

지금

반환 할 데이터에서 SUB2를 얻을 수 SUB1을 참조

d1$sub <- c("LEFT CAROTID STENOSIS: (50-69)APPROXIMATELY 50-55% (0-49)LESS THAN 50%  COMMON:", "LEFT CAROTID STENOSIS: (50-69)APPROXIMATELY 60-70% (0-49)LESS THAN 50% COMMON:", "LEFT CAROTID STENOSIS: (40-60)APPROXIMATELY 40% INCOMPLETE SCAN SEE NOTES (40-50)LESS THAN 50% COMMON:") 

d1$sub 
[1] "LEFT CAROTID STENOSIS: (50-69)APPROXIMATELY 50-55% (0-49)LESS THAN 50% COMMON:"       
[2] "LEFT CAROTID STENOSIS: (50-69)APPROXIMATELY 60-70% (0-49)LESS THAN 50% COMMON:"       
[3] "LEFT CAROTID STENOSIS: (40-60)APPROXIMATELY 40% INCOMPLETE SCAN SEE NOTES (40- 50)LESS THAN 50% COMMON:" 

추출 SUB1 "(0-49)보다 작음 50 % ","(0-49) 50 % 미만 "및"(40-50) 50 % 미만 "

d1$sub2 <- as.character(lapply((strapply(d1$sub,"((?<=\\d1$sub1).*?(?=COMMON))", perl=TRUE)), unique)) 
d1$sub2 
[1] "NULL" "NULL" "NULL" 

* 원래의 게시물

내가 텍스트 보고서의 의료 정보를 추출하고, 다음 변수 ($ SUB2를 찾는 정규식의 일부로서 하나 개의 변수 ($ SUB1)를 사용하려고 시도하고있다 ** 아래).

어떻게 변수 값을 사용하여 다음 변수를 정규 표현할 수 있습니까?

library(plyr) 
library(tm) 
library(stringr) 
library(gsubfn) 

#Dataset of velocities 
d1 <- c("CCA: 135 cm/sec ICA: 50 cm/sec", "CCA: 150 cm/sec ICA: 75 cm/sec") 
d1 
[1] "CCA: 135 cm/sec ICA: 50 cm/sec" "CCA: 150 cm/sec ICA: 75 cm/sec" 

#Lookahead to get sub1 
d1$sub1 <- as.character(lapply((strapply(d1,"(.*?(?=ICA:))", perl=TRUE)), unique)) 
Warning message: 
In d1$sub1 <- as.character(lapply((strapply(d1, "(.*?(?=ICA:))", : 
Coercing LHS to a list 
d1 
[[1]] 
[1] "CCA: 135 cm/sec ICA: 50 cm/sec" 

[[2]] 
[1] "CCA: 150 cm/sec ICA: 75 cm/sec" 

$sub1 
[1] "CCA: 135 cm/sec " "CCA: 150 cm/sec " 

#Now reference sub1 to get sub2 - does not work? 
#Want to return "ICA:50 cm/sec" and "ICA:75 cm/sec" 
#Used paste(d1$sub1) to try getting the $sub1 variable into the regex, but doesn't work) 
d1$sub2 <- as.character(lapply((strapply(d1,"((?<=paste(d1$sub1)).*?)", perl=TRUE)), unique)) 
d1$sub2 
[1] "NULL" "NULL" "NULL" 

텍스트 구조를 갖고 있지만, 제 1 가변 ($ SUB1) 쉽게 정의 등 길이, 내용의 측면에서 매우 가변적이지만를 사용하여 제 2 가변 가장 정확한 것 정의.

어쩌면 나는 텍스트가 매우 가변적이라는 것을 강조 했어야한다. 그래서 텍스트 패턴을 기반으로 한 간단한 정규 표현식이 작동하지 않을 것이다. 텍스트 내에서 두 번째 변수를 찾으려면 첫 번째 변수를 사용해야합니다. 의료 정보이므로 실제 데이터를 게시 할 수 없습니다.

+0

확실하지 요소는 원하는 최종 출력은 두 변수 ($ SUB1 = CA입니다/초, $ sub2 = CCA : 50cm/초). 변수를 생성 할 수는 있지만 두 번째 로케이터를 얻기 위해 먼저 참조하는 방법에 어려움을 겪고 있습니다. – user2547308

답변

0

정규식에서 변수를 사용하려면 need to escape various characters이 될 것이지만 더 간단한 것은 아닐까요?

sub('(.*)ICA.*', '\\1', d1) 
#[1] "CCA: 135 cm/sec " "CCA: 150 cm/sec " 
sub('.*(ICA.*)', '\\1', d1) 
#[1] "ICA: 50 cm/sec" "ICA: 75 cm/sec" 
2

이 시도 :

> d1 <- c("CCA: 135 cm/sec ICA: 50 cm/sec", "CCA: 150 cm/sec ICA: 75 cm/sec") 
> t(strapplyc(d1, "\\w+: \\S+ \\S+", simplify = TRUE)) 
    [,1]    [,2]    
[1,] "CCA: 135 cm/sec" "ICA: 50 cm/sec" 
[2,] "CCA: 150 cm/sec" "ICA: 75 cm/sec" 
0

paste0() 기능을 사용해보십시오. 그러면 모든 변수와 정규 표현식을 함께 사용하게됩니다. 135cm -

grep(paste0("^.*", variable, ".*$"), d1) 
당신의 변수가 가질 수 있다면 당신은 또한 paste0()에 인수 collapse = ""을 추가 할 수 있습니다

> 1 나는 완전히 질문을 이해