2016-08-24 2 views
0

나는이 각 항목 및 저장소에서 일련 번호를 추출해야일부에 특정 텍스트의 위치가 무작위 때

uniqueID <- sample(1:10, 3, replace=F) 
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159") 
myData <- cbind.data.frame(uniqueID, faultDetails) 

처럼 조금 보이는 dataframe이 새로운 변수이지만 필드 내의 위치는 고정되어 있지 않습니다. 유일한 상수는 일련 번호가 F, 숫자, 문자, 문자, 숫자, 문자, 문자, 문자, 숫자, 숫자, 숫자 형식으로되어 있다는 것입니다. 또한, 텍스트의 경우 항목에서 항목으로 바뀝니다 (아, 무료 텍스트의 즐거움!).

저는 이것을 내 dplyr 파이프 라인의 일부로하고 싶습니다. 어떤 도움을 주셔서 감사합니다.

답변

2

올바른 정규 표현식을 사용하는 경우는별로 중요하지 않습니다. 나는 이런 식으로 접근하는 것입니다 :

library(dplyr) 
library(stringr) 

uniqueID <- sample(1:10, 3, replace=F) 
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159") 
myData <- cbind.data.frame(uniqueID, faultDetails) %>% 
    mutate(serial_number = str_extract(faultDetails, 
            "(F|f)\\d{1}\\w{2}\\d{1}\\w{3}\\d{3}")) 

myData 

    uniqueID          faultDetails serial_number 
1  7 fault is blah blah blah and serial is F1AB3CDE123 F1AB3CDE123 
2  9 Serial No: f1ds6hrc813, fault is blah blah blah f1ds6hrc813 
3  3 fault: blah blah blah serial number: F2GE8FDW159 F2GE8FDW159 

\w 메타 문자는 "단어 문자"를 찾습니다; 여기에서는 글자를 찾는 역할을합니다 (밑줄도 감지 할지라도). \w{2}이라는 표기법은 두 개의 문자로 이루어진 시퀀스를 원한다는 것을 의미합니다. \d 메타 문자는 숫자를 찾으며, 중괄호 안에있는 숫자는 찾을 시퀀스의 길이입니다.

정규식을 (F|f)으로 시작하면 F 또는 으로 시작될 수 있음을 의미합니다.

+0

정말 감사하게 생각하고 정말 명확한 설명을 드리겠습니다. 그래서 나는 실제로 무슨 일이 벌어지고 있는지 이해합니다 :-) – pjbudden

관련 문제