r - 在特定短语后提取数字

标签 r regex string

我一直在尝试编写两个正则表达式来完成以下两个任务:

  1. 拉出“EDG ICD HCUP CCS”后面的数字
  2. 拉出“EDG ICD HCUP CCS 159(预测模型-版本1.0)-”后面的字眼

我想将数字存储在名为“类别”的列中,并将单词存储在“诊断”中

字符串位于列名“GROUPER_NAME”中。

df <- structure(list(GROUPER_ID = structure(c("9001742130", "9001742138", 
"9001742058", "9001742062", "9001742102", "9001742247", "9001742055", 
"9001742158", "9001742036", "9001742053"), label = "GROUPER_ID", format.sas = "$"), 
    GROUPER_NAME = structure(c("EDG ICD HCUP CCS 130 (PREDICTIVE MODELS-VERSION 1.0)-PLEURISY; PNEUMOTHORAX; PULMONARY COLLAPSE", 
    "EDG ICD HCUP CCS 138 (PREDICTIVE MODELS-VERSION 1.0)-ESOPHAGEAL DISORDERS", 
    "EDG ICD HCUP CCS 58 (PREDICTIVE MODELS-VERSION 1.0)-OTHER NUTRITIONAL; ENDOCRINE; AND METABOLIC DISORDERS", 
    "EDG ICD HCUP CCS 62 (PREDICTIVE MODELS-VERSION 1.0)-COAGULATION AND HEMORRHAGIC DISORDERS", 
    "EDG ICD HCUP CCS 102 (PREDICTIVE MODELS-VERSION 1.0)-NONSPECIFIC CHEST PAIN", 
    "EDG ICD HCUP CCS 247 (PREDICTIVE MODELS-VERSION 1.0)-LYMPHADENITIS", 
    "EDG ICD HCUP CCS 55 (PREDICTIVE MODELS-VERSION 1.0)-FLUID AND ELECTROLYTE DISORDERS", 
    "EDG ICD HCUP CCS 158 (PREDICTIVE MODELS-VERSION 1.0)-CHRONIC KIDNEY DISEASE", 
    "EDG ICD HCUP CCS 36 (PREDICTIVE MODELS-VERSION 1.0)-CANCER OF THYROID", 
    "EDG ICD HCUP CCS 53 (PREDICTIVE MODELS-VERSION 1.0)-DISORDERS OF LIPID METABOLISM"
    ), label = "GROUPER_NAME", format.sas = "$")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

对于第一个示例,我想提取“159”和“泌尿道感染”并将它们分别放在“类别”和“诊断”列中。我试图改变这里的一些解决方案以适应我的场景,但我对正则表达式真的很糟糕,无法得到任何工作。任何帮助将不胜感激!

最佳答案

我们可以使用 base R 中的 sub。捕获前缀子字符串后的数字 (\\d+),以及 )- 后的字符。在替换中,指定捕获组的反向引用(\\1\\2),并用read将它们读入一个两列data.frame .csv

read.csv(text = sub("\\w+ \\w+ \\w+ \\w+ (\\d+)\\s.*\\)-(.*)", 
         "\\1:\\2", df$GROUPER_NAME), sep = ":", header = FALSE, 
      col.names = c("category", "diagnosis"))

-输出

 category                                             diagnosis
1       130            PLEURISY; PNEUMOTHORAX; PULMONARY COLLAPSE
2       138                                  ESOPHAGEAL DISORDERS
3        58 OTHER NUTRITIONAL; ENDOCRINE; AND METABOLIC DISORDERS
4        62                 COAGULATION AND HEMORRHAGIC DISORDERS
5       102                                NONSPECIFIC CHEST PAIN
6       247                                         LYMPHADENITIS
7        55                       FLUID AND ELECTROLYTE DISORDERS
8       158                                CHRONIC KIDNEY DISEASE
9        36                                     CANCER OF THYROID
10       53                         DISORDERS OF LIPID METABOLISM

关于r - 在特定短语后提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68024208/

相关文章:

java - 循环遍历字符串 - 输入作为参数 [java]

java - 如何根据第一个字母对名称进行分类,而不必列出整个字母表?

html - Shiny - 将下拉菜单(选择标签)的大小(填充?)更改得更小

Rcpp函数错误与STRSXP不兼容: [type=NULL]

正则表达式 - 字符串帮助 - Stata

java - XML 架构模式错误

python - Pandas :按列单元格中特定子字符串的多次出现过滤行

r - 与回归函数相比,nnet 的多项式汇总函数速度极慢

r - 将函数应用于以 R 中特定模式开头的所有变量

php - PHP 中的 Preg_replace