如何提取R中特定关键字后面的子字符串?[已关闭]

pcww981p  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(125)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

4天前关闭。
Improve this question
我想提取单词“管理提供者”后面的人名。该名称可以由名、中间名和姓组成(有时只包含名和姓)。此外,如果人名后面有一个人名头衔,例如:博士我对这个不感兴趣

df <- data.frame("id"= c(12, 19, 20), 'comments' = c('APK COMMENTS FOR APK LOG ID (145991): APK ADMINISTERING PROVIDER: LAURA ABE LE\rAPK ORDERING PROVIDER: EMMA COURTIER (CMS:19928)',
                                               'APK LOG ID (45664705): APK Administering Provider: CHASITY MCDANIELS (1972609856:0000034)\rAPK ORDERING PROVIDER: PAUL LAMAR (19785663:19928476)',
                                               'APK ADMINISTERING PROVIDER: JOHN DOE, R.N. (EPIC:107080)\rAPK ORDERING PROVIDER: OHM LOHAN (EPIC:1987)'))

下面是我尝试解决方案,但显然它是行不通的:

updated.df <- df %>% 
  mutate(name = sub(".ADMINISTERING PROVIDER:", "", comments, ignore.case = T),
         name = trimws(gsub("[(].*$","", comments, ignore.case = T), which = c('both', 'left', 'right')))
zsbz8rwp

zsbz8rwp1#

在使用sub()之前和之后,您可以删除不相关的信息。后者可能是“,”表示学位,“(“表示ID或特殊字符“\r”。如果遇到不同的情况,您应该将它们添加到第二个sub()调用的模式参数中。

library(tidyverse)

df$comments %>%
  sub(pattern = ".*ADMINISTERING PROVIDER: ",
      replacement = "", 
      x = ., ignore.case = TRUE) %>%
  sub(pattern = ",.*| \\(.*|\r.*", 
      replacement = "",
      x = .)
zvms9eto

zvms9eto2#

您可以对名称执行str_extract操作,使用(?i)使匹配不区分大小写,并使用正向后查找((?<=...))来Assert匹配前面必须有“Administering provider:“。实际的匹配部分以字符类[\\w ]+表示,该字符类同时包括(且仅包括 *)字母数字字符(\\w)和空白字符``(请注意,\\s在此不起作用,因为此字符类包括\r

library(stringr)
str_extract(df$comments, "(?i)(?<=ADMINISTERING PROVIDER:\\s)[\\w ]+")
[1] "LAURA ABE LE"       "CHASITY MCDANIELS " "JOHN DOE"

相关问题