2014-11-18 11 views
0

이 문자열의 첫 번째와 두 번째 숫자를 추출하여 별도의 변수에 저장하려고합니다.정규식을 사용하여 R의 문자열에서 값 추출

(User20,10.25) 

사용자 번호와 그 값을 얻는 방법을 알 수 없습니다.

내가 지금까지 해왔 던 것은 이것이지만, 나머지 문자열을 제거하고 숫자 만 얻는 방법을 모르겠다. 당신은 sub으로 strsplit을 사용할 수 있습니다

gsub("\\(User", "", string) 

답변

6

str1 <- '(User20,10.25)' 
scan(text=gsub('[^0-9.-]+', ' ', str1),quiet=TRUE) 
#[1] 20.00 10.25 

이 경우 문자열이 사용

str2 <- '(User20-ht,-10.25)' 
scan(text=gsub('-(?=[^0-9])|[^0-9.-]+', " ", str2, perl=TRUE), quiet=TRUE) 
#[1] 20.00 -10.25 

또는

library(stringr) 
str_extract_all(str1, '[0-9.-]+')[[1]] 
#[1] "20" "10.25" 

또는이다 시도 stringi

library(stringi) 
stri_extract_all_regex(str1, '[0-9.-]+')[[1]] 
#[1] "20" "10.25" 
+0

은'scan'의 대답은이 숫자를 가지고 특히 때문에, 좋은 산출. – thelatemail

+0

@Richard Scriven 감사합니다. 그런 다음 그것을 제거하겠습니다. – akrun

+1

좋은 옵션. +1. 유일한 변경 사항은 음수의 가능성을 포함하는 것입니다 ('[0-9.] + '를''[0-9 .-] +''로 변경). – A5C1D2H2I1M1N2O1R2T1

4

...

> sub('\\(User|\\)', '', strsplit(x, ',')[[1]]) 
[1] "20" "10.25" 

아마 당신이 대신 원하는 상황에 맞게하는 것이 더 쉽습니다.

> regmatches(x, gregexpr('[0-9.]+', x))[[1]] 
[1] "20" "10.25" 
5

Tyler Rinker"qdapRegex" package에는 이러한 종류의 물건에 유용한 몇 가지 기능이 있습니다. 이 경우

, 당신은 가장 가능성 rm_number에 관심이있을 것입니다 :

library(qdapRegex) 
rm_number(x, extract = TRUE) 
# [[1]] 
# [1] "20" "10.25" 
0

는 IS 다음 한 가지 방법 :

[^,\)\([A-Z]] 
관련 문제