微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tidyr 与可选组分开

如何解决Tidyr 与可选组分开

我正在尝试使用 tidyr 包中的 extract 将包含单个字符串的列拆分为 3 个单独的列。此问题的最小工作示例如下:

# A tibble: 3 x 1
  question_codes   
  <chr>            
1 QBL10,QF14,QM20
2 QBL1,QF4        
3 QM10  

问题代码 QBL、QF 和 QM 对应于基线、每两周和每月的问题。我想将它们分别分成单独的列,在不存在代码的地方填充 NA。结果应如下所示:

# A tibble: 3 x 4
  question_codes    Base  Fortnightly Monthly
  <chr>             <chr> <chr>       <chr>  
1 QBL10,QM20 QBL10 QF14        QM20   
2 QBL1,QF4         QBL1  QF4         NA     
3 QM10              NA    NA          QM10 

不幸的是,我无法让正则表达式为此正常工作。我试过使用 df %>% extract(question_codes,into = c("Base","Fortnightly","Monthly"),"^(QBL[1-9].*)?,(QF[1-9].*)?,(QM[1-9].*)?",remove = FALSE)

但这没有正确指定可选组并导致:

# A tibble: 3 x 4
  question_codes    Base  Fortnightly Monthly
  <chr>             <chr> <chr>       <chr>  
1 QBL10,QF4         NA    NA          NA     
3 QM10              NA    NA          NA 

我是一个正则表达式新手,所以非常感谢任何帮助!

解决方法

使用模式:

 pat = '(?:(QBL\\d+),)?\\s*(?:(QF\\d+),)?\\s*(QM\\d+)?'

这里所有的组都是可选的。即我们在每个组上使用 ? 以便有 0 或 1 匹配


df %>%
     extract(question_codes,c('a','b','c'),regex = pat,remove = FALSE)

    question_codes     B    F    M
1 QBL10,QF14,QM20 QBL10 QF14 QM20
2         QBL1,QF4  QBL1          
3              QM10            QM10
,

另一种使用 <img src="https://..." /> 的方法。

str_extract

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?