2016-10-13 9 views
2

문자열에서 혈압을 추출하고 싶습니다. 데이터는 다음과 같습니다추출 패턴 "숫자/숫자"

text <- c("at 10.00 seated 132/69", "99/49", "176/109", 
"10.12 I 128/51, II 149/51 h.9.16", "153/82 p.90 ja 154/81 p.86", 
"h:17.45", "not measured", "time 7.30 RR 202/97 p. 69") 

나는 패턴 "번호/번호"를 추출하고 싶습니다 (즉 "132/69").

[[1]] 
[1] "132/69" 

[[2]] 
[1] "99/49" 

[[3]] 
[1] "176/109" 

[[4]] 
[1] "128/51" "149/51" 

[[5]] 
[1] "153/82" "154/81" 

[[6]] 
[1] "" 

[[7]] 
[1] "" 

[[8]] 
[1] "202/97" 

내가 가진 가장 가까운 솔루션 :

gsub("^.*([0-9]{3}/[0-9]+).*","\\1", text) 

불행하게도, 내 솔루션은 또한 패턴의 일치하는 모든 경우를 반환하지 않으며, 위의 예에서 예상되는 출력 목록을 것 필요한 패턴이 전혀없는 문자열을 반환합니다. 당신이 설명하는 정확한 출력을 얻을하려는 경우, 당신이 사용할 수있는

+1

'라이브러리 (stringr)','str_extract_all (텍스트, "\\ d +/\ d d" –

답변

3
regmatches(text, gregexpr("\\d+/\\d+", text)) 
#[[1]] 
#[1] "132/69" 
# 
#[[2]] 
#[1] "99/49" 
# 
#[[3]] 
#[1] "176/109" 
# 
#[[4]] 
#[1] "128/51" "149/51" 
# 
#[[5]] 
#[1] "153/82" "154/81" 
# 
#[[6]] 
#character(0) 
# 
#[[7]] 
#character(0) 
# 
#[[8]] 
#[1] "202/97" 
1

library(stringr) 
library(magrittr) 
text <- c("at 10.00 seated 132/69", "99/49", "176/109", 
      "10.12 I 128/51, II 149/51 h.9.16", "153/82 p.90 ja 154/81 p.86", 
      "h:17.45", "not measured", "time 7.30 RR 202/97 p. 69") 

str_extract_all(text, "\\d{2,3}/\\d{1,3}") %>% 
    lapply(FUN = function(x) if (length(x) == 0) "" else x) 

[[1]] 
[1] "132/69" 

[[2]] 
[1] "99/49" 

[[3]] 
[1] "176/109" 

[[4]] 
[1] "128/51" "149/51" 

[[5]] 
[1] "153/82" "154/81" 

[[6]] 
[1] "" 

[[7]] 
[1] "" 

[[8]] 
[1] "202/97" 

또한 사용할 수 롤랜드의 regmatches 당신이 기본 R.

1

약간에게에 체류하려는 경우 & @ Benjamin의 솔직한 접함으로 멋지고 평범한 문자 벡터를 반환하고 @ Roland의 목록에서 길이가 0 인 요소를 처리하지 않아도됩니다.

library(stringi) 
library(purrr) 

txt <- c("at 10.00 seated 132/69", "99/49", "176/109", 
     "10.12 I 128/51, II 149/51 h.9.16", "153/82 p.90 ja 154/81 p.86", 
     "h:17.45", "not measured", "time 7.30 RR 202/97 p. 69") 

stri_match_all_regex(txt, "\\d{2,3}/\\d{1,3}") %>% 
    flatten_chr() %>% 
    discard(is.na) 
## [1] "132/69" "99/49" "176/109" "128/51" "149/51" "153/82" "154/81" "202/97" 
관련 문제