Регулярные выражения в R (несколько комбинаций строки) - PullRequest
2 голосов
/ 24 апреля 2019

Пожалуйста, я хотел бы задать вопрос о регулярных выражениях в R. Ниже приведен код:

string <- "BROCA DIN 338 4,00 MM"

string_list <- regmatches(x=string, gregexpr("[0-9]+\\s\\w+", text=string))

words <- sapply(string_list, toString)
words[is.na(string_list)] <- NA

words <- gsub(pattern = "[[:punct:]]+", replacement="", x=words)

regmatches(x=words, gregexpr("[0-9]+[[:space:]]+\\w+", text=words))

После этого результат будет следующим:

[1] "338 4" "00 MM"

Моя проблема в том, что мне нужно использовать grepl следующим образом:

dose_1KG <- subset(new_df_1, (grepl("338 4 MM",new_df_1$xprod,fixed=TRUE)==TRUE) |

                         (grepl("338 4MM",new_df_1$xprod,fixed=TRUE)==TRUE) |

                         (grepl("338 4 0 MM",new_df_1$xprod,fixed=TRUE)==TRUE) |

                         (grepl("338 4 0MM",new_df_1$xprod,fixed=TRUE)==TRUE) |

                         (grepl("338 4 00 MM",new_df_1$xprod,fixed=TRUE)==TRUE) |

                         (grepl("338 4 00MM",new_df_1$xprod,fixed=TRUE)==TRUE))

Пожалуйста, есть ли способ использовать регулярные выражения или некоторую функцию в R, чтобы сделать это автоматически без вставкинесколько комбинаций "338 4 00 MM"?

Большое спасибо.

С наилучшими пожеланиями!

1 Ответ

0 голосов
/ 24 апреля 2019

Эта операция может быть попыткой выбрать строку, в которой переменная xprod совпадает (точно) с одной из этих строк в аргументах шаблона. Если это так, вы можете сделать это экономически с помощью:

dose_1KG <- subset(new_df_1, xprod %in% 
                                 c("338 4 MM","338 4MM","338 4 0 MM","338 4 00 MM","338 4 00MM")

Использование $ для извлечения переменной в выражении для второго аргумента из того же кадра данных в subset просто неправильно. Весь смысл subset состоит в том, чтобы позволить человеку избежать этой необходимости. Если вопрос заключается в том, как определить строки, в которых эти выражения могут быть частичным совпадением, то вам может потребоваться использовать grepl, но вы все равно можете упростить вызов paste0, который затем соединяется с "|" оператор (и снова не использующий "$"):

dose_1KG <- subset( new_df_1, 
                     grepl( paste0( c("338 4 MM","338 4MM","338 4 0 MM","338 4 00 MM","338 4 00MM"),
                            collapse="|", fixed = TRUE), # suspect the fixed argument unnecessary
                            xprod)
                   ) 

Предостережение: они не проверены в отсутствие MCVE,

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