Как провести распознавание образов для строк? - PullRequest
1 голос
/ 17 января 2020

Ниже приведен вектор, с которым я работаю. То, что я пытаюсь сделать, это извлечь только возраст (в том числе число месяцев или лет) из каждой записи в векторе. Я знаю, что должен использовать функции str / grep и regex, но не уверен, как объединить функции, чтобы получить то, что я хочу сделать. Так, например: 18MOM - это 18-месячный мальчик, 18YOF - 18-летняя женщина et c.

 [1] "DX LAC CHIN/ABRASION CHEEK/CONTU HAND(S): 6YOF OUT RIDING BIKE, W WOBBLY ON BIKE AND HIT FACE ON ROAD, ABRASION TO L CHEEK, CHIN & R HAND"     
 [2] "DX LWOBS: 2YOM L PINKY FINGER CAUGHT IN BOWLING BALL, SM AMT BLDG/SWELLING TO PINKY FINGER. CRUSH W BOWLING BALL"                              
 [3] "DX KNEE SPRAIN/CONTU KNEE/HIGH BLD PRESS: 16YOM R KNEE PN AFTER TWISTING KNEE COMING DOWN F JUMP' DUR' BASKETBALL GAME, LANDED ON BENT KNEE"   
 [4] "DX LBP: 21YOM STRETCHING OUT AFTER WORKOUT (DOING ***) HEARD POP"                                                                              
 [5] "DX FX PHALANX FOOT: 36YOF STUBBED R GREAT TOE ON STAIRS, PN, SWELL'  SUROUNDING R GREAT TOE"                                                   
 [6] "DX ELBOW CONTU/ELBOW ABRASION: 10YOM FELL F BED HAND HIT R ELBOW ON BEDPLAYING W SISTER, BRUSING TO ELBOW"                                     
 [7] "DX LWOBS: 3YOM LAC TO SCALP/ S/P PLASTIC LAMP FELL OFF DRESSER TO HEAD,PT W ~1CM LAC"                                                          
 [8] "DX CONTU FINGER: 55YOM L 5TH FINGER PN AFTER FALL F BICYCLE W TRYING TOBAL AT STOPPED POSITION"                                                
 [9] "DX COSTOCHONDRITIS/CHEST PN: 24YOM SUBSTERNAL CHEST PN W WORKING OUT, HAD SHARP SPASM PN TO SUBSTERNAL CHEST TO L CHEST"                       
[10] "DX 1ST DEG BURN E: 28YOF W BURN TO L HAND, GRABBED HOT PAN UNDER BROILER W/O POTHOLDER; REDNESS TO PLAM & FINGER TIPS, FEW BLISTERS START' G F"
[11] "DX LWOBS LAC HAND: 1YOM W FINGER INJ, CUT FINGER ON A FAN"   

Ответы [ 2 ]

2 голосов
/ 17 января 2020
agevector<-gsub(".* (\\d*[MY]O).*","\\1",vector)

Это создаст agevector, который будет символьным вектором, включающим такие вещи, как 19MO и 5YO et c. Он ищет шаблон «[любое количество цифр], за которым следует [M или Y], за которым следует O».

1 голос
/ 17 января 2020

Вы можете использовать stringr

Вы можете сначала извлечь все возрасты из вашего текста, а затем вычислить дальнейший анализ. Этот код поможет (если ваш вектор строки называется str):

library(stringr)
ages <- str_extract_all(str, "(\\d{1,2}[MY]O[MF])", simplify = TRUE)

Вариант использования:

library(stringr)

str <- c("DX LAC CHIN/ABRASION 12YOF CHEEK/CONTU HAND(S): 6YOF OUT RIDING BIKE, W WOBBLY ON BIKE AND HIT FACE ON ROAD, ABRASION TO L CHEEK, CHIN & R HAND",
         "DX KNEE SPRAIN/CONTU KNEE/HIGH BLD PRESS: 16YOM R KNEE PN AFTER TWISTING KNEE COMING DOWN F JUMP' DUR' BASKETBALL GAME, LANDED ON BENT KNEE", 
         "DX FX PHALANX FOOT: 36YOF STUBBED R GREAT TOE ON STAIRS, PN, SWELL'  SUROUNDING R GREAT TOE")

str <- paste(str, collapse = '')
ages <- str_extract_all(str, "(\\d{1,2}[MY]O[MF])", simplify = TRUE)

Вывод:

> ages
      [,1]    [,2]   [,3]    [,4]   
[1,] "12YOF" "6YOF" "16YOM" "36YOF"

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...