как отделить строку на основе конкретных требований - PullRequest
0 голосов
/ 17 января 2019

У меня есть переменная a, она содержит такие символы, как:

DEVICE PRF .75MG 0.5ML
DEVICE PRF 1.5MG 0.5MLX4
CAP 12-25MG 30
CAP DR 60MG 100UD 3270-33 (32%)

Я бы хотел разделить их на три части (или переменные):

x               y               z
DEVICE PRF    .75MG            0.5ML
DEVICE PRF     1.5MG          0.5MLX4
CAP           12-25MG           30
CAP DR         60MG          100UD 3270-33 (32%)

Первая часть - это описание, вторая - сила, а третья часть - объем. Я думаю, что могу использовать gregexpr (), но не уверен, как это реализовать. Любые предложения приветствуются. Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Используя предположение, что средняя часть не имеет пробелов и всегда начинается с . или цифры, мы можем сделать это в базе R следующим образом:

a <- c("DEVICE PRF .75MG 0.5ML", "DEVICE PRF 1.5MG 0.5MLX4",
       "CAP 12-25MG 30", "CAP DR 60MG 100UD 3270-33 (32%)")

a_as_csv <- sub('([^.0-9]*) ([.0-9][^ ]+) (.*)', '\\1,\\2,\\3', a)

read.csv(textConnection(a_as_csv), col.names = c('x', 'y', 'z'), header = F)
#            x       y                   z
# 1 DEVICE PRF   .75MG               0.5ML
# 2 DEVICE PRF   1.5MG             0.5MLX4
# 3        CAP 12-25MG                  30
# 4     CAP DR    60MG 100UD 3270-33 (32%)
0 голосов
/ 17 января 2019

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

library(stringr)
str_match(x, "(.*)[ ]{1,}(.*(MG|ML))[ ]{1,}(.*)")[, -c(1, 4)]
#      [,1]         [,2]      [,3]                 
# [1,] "DEVICE PRF" ".75MG"   "0.5ML"              
# [2,] "DEVICE PRF" "1.5MG"   "0.5MLX4"            
# [3,] "CAP"        "12-25MG" "30"                 
# [4,] "CAP DR"     "60MG"    "100UD 3270-33 (32%)"

Предполагая, что вторая / средняя часть всегда заканчивается MG или ML и не имеет пробелов.

Шаблон (.*)[ ]{1,}(.*(MG|ML))[ ]{1,}(.*) можно прочитать следующим образом: первая совпадающая часть содержит что-либо + хотя бы один пробел + вторая часть для сопоставления, заканчивающаяся в MG или ML + хотя бы один пробел + третья часть для сопоставления, содержащая что-либо.

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