如何解决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 举报,一经查实,本站将立刻删除。