如何通过匹配字母和字符来提取文本?

How can extract text by matching letters and characters?

我有一个包含

的数据框
Drug name
コージネイトFSバイオセット注250 250国際単位
アドベイト注射用500 500単位

我想提取日本药物名称和数量以创建两个新列,

Drug_clean   Volume
コージネイト    250
アドベイト   500

为了做到这一点,我打算识别F的字母和特定字符“注”,但我不知道该怎么做。你能告诉我如何实现吗?

谢谢。

这里有几个障碍 - 一是提取匹配项,二是将 Unicode 转换为数字。 我们可以通过定义一个小的翻译函数,并设置适当的语言环境来做到这一点。

df <- tibble(drug_name = c("コージネイトFSバイオセット注250 250国際単位", "アドベイト注射用500 500単位"))

library(stringr)
library(dplyr)
tmcn::setchs() # to set locale (Chinese here, might need an appropriate Japanese instead)

translate <- Vectorize(function(x){
  x <- strsplit(x, "")
  as.list(x[[1]]) %>%
    lapply(function(x){
      switch(x,
             "3" = 3, "7" = 7, "8" = 8, "2" = 2, "5" = 5,
             "4" = 4, "6" = 6, "1" = 1, "9" = 9, "0" = 0, NA
      )}) %>%
    paste0(collapse = "") %>% as.numeric()
})

df %>%
  transmute(
    Drug_clean = ifelse(str_detect(drug_name, "F"),
                        str_extract(drug_name, ".*(?=F)"),
                        str_extract(drug_name, ".*(?=注)")),
    Volume = translate(str_extract(drug_name, "[3782546190].{2}"))
  )

#>  A tibble: 2 x 2
#>  Drug_clean   Volume
#>  <chr>         <dbl>
#> 1 コージネイト    250
#> 2 アドベイト      500

对于字符向量,您可以使用 strsplit() from base 并使用 | 分隔不同的分隔符。从您的示例中,您需要未列出的 lapply() 提供的每个拆分的第一个元素。

df<- rbind("コージネイトFSバイオセット注250 250国際単位",
          "アドベイト注射用500 500単位")

#extract the columns
library(dplyr)
Drug_clean <-strsplit(df,"F|注") %>% lapply(., `[[`, 1) %>% unlist()
Volume <- str_extract(df, "[378254619].{2}")

tibble(Drug_clean,Volume)
> tibble(Drug_clean,Volume)
# A tibble: 2 × 2
  Drug_clean   Volume
  <chr>        <chr> 
1 コージネイト 250
2 アドベイト   500

要获取 Volume 列的 as.numeric(),请遵循 @Donald Seinen 的优秀 switch() 代码。