首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于某些准则的R中字符串拆分

基于某些准则的R中字符串拆分
EN

Stack Overflow用户
提问于 2015-11-12 04:30:00
回答 2查看 71关注 0票数 3

我处理的字符串如下所示

代码语言:javascript
复制
ID      Col1
------------------------------------------------------------------------------------
11         GLIPIZIDE  10 MG TAB 1 TABLET PO QAM
23         GLIPIZIDE  5 MG TAB 2 TABLETS PO BID
32         GLIPIZIDE  TAB PO
12         GLIPIZIDE  TAB PO PRN
343        PIOGLITAZONE [ACTOS] 45 MG TAB 1 TABLET PO DAILY #3 MONTHS SUPPLY REFILL X3
31        METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3
44        METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #400 TABLETS REFILL X3
34        METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3
38        METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3

我想做的是两件事。

代码语言:javascript
复制
1) Store the first word a new column (Col2)
2) Search for the term "mg" and capture the string before the word "mg"
   and store that in a new column (Col3)

在这个例子中,最后的输出应该如下所示

代码语言:javascript
复制
Id     Col2                  Col3  
---------------------------------
11     GLIPIZIDE             10 MG
23     GLIPIZIDE             5 MG
32     GLIPIZIDE             
12     GLIPIZIDE
343    PIOGLITAZONE          45 MG 
31     METFORMIN             500 MG
44     METFORMIN             500 MG
34     METFORMIN             500 MG
38     METFORMIN             500 MG

在这个问题上的任何帮助都是徒劳无功的。

数据

代码语言:javascript
复制
dd <- read.table(header = TRUE, stringsAsFactors = FALSE, text="ID      Col1
  11         'GLIPIZIDE  10 MG TAB 1 TABLET PO QAM'
23         'GLIPIZIDE  5 MG TAB 2 TABLETS PO BID'
32         'GLIPIZIDE  TAB PO'
12         'GLIPIZIDE  TAB PO PRN'
343        'PIOGLITAZONE [ACTOS] 45 MG TAB 1 TABLET PO DAILY #3 MONTHS SUPPLY REFILL X3'
31        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'
44        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #400 TABLETS REFILL X3'
34        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'
38        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-12 05:01:09

这是用弦乐做的。

代码语言:javascript
复制
library(stringi)
ss <- stri_extract_all_regex(dd$Col1, "(?i)(^\\w+)|(\\d+ mg)", simplify = TRUE)
setNames(cbind(dd[1], ss), c("ID", "Col2", "Col3")))
#    ID         Col2   Col3
# 1  11    GLIPIZIDE  10 MG
# 2  23    GLIPIZIDE   5 MG
# 3  32    GLIPIZIDE       
# 4  12    GLIPIZIDE       
# 5 343 PIOGLITAZONE  45 MG
# 6  31    METFORMIN 500 MG
# 7  44    METFORMIN 500 MG
# 8  34    METFORMIN 500 MG
# 9  38    METFORMIN 500 MG
票数 1
EN

Stack Overflow用户

发布于 2015-11-12 04:37:23

一个是使用两个正则表达式( 1)捕获字符串开头的第一个单词(^\\w+)和2)查找数字,后面跟着"mg“(\\d+ mg)

代码语言:javascript
复制
dd <- read.table(header = TRUE, stringsAsFactors = FALSE, text="ID      Col1
  11         'GLIPIZIDE  10 MG TAB 1 TABLET PO QAM'
23         'GLIPIZIDE  5 MG TAB 2 TABLETS PO BID'
32         'GLIPIZIDE  TAB PO'
12         'GLIPIZIDE  TAB PO PRN'
343        'PIOGLITAZONE [ACTOS] 45 MG TAB 1 TABLET PO DAILY #3 MONTHS SUPPLY REFILL X3'
31        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'
44        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #400 TABLETS REFILL X3'
34        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'
38        'METFORMIN [GLUCOPHAGE XR] 500 MG TAB SR 24HR 2 TABLETS PO DAILY #200 TABLETS REFILL X3'")



within(dd, {
  col1 <- gsub('(^\\w+)|.', '\\1', Col1)
  dose <- gsub('(?i)(\\d+ mg)|.', '\\1', Col1)
})[, c('col1','dose')]

#           col1   dose
# 1    GLIPIZIDE  10 MG
# 2    GLIPIZIDE   5 MG
# 3    GLIPIZIDE       
# 4    GLIPIZIDE       
# 5 PIOGLITAZONE  45 MG
# 6    METFORMIN 500 MG
# 7    METFORMIN 500 MG
# 8    METFORMIN 500 MG
# 9    METFORMIN 500 MG
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33664463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档