gpt4 book ai didi

r - Tidyr 与可选组分开

转载 作者:行者123 更新时间:2023-12-03 08:21:05 26 4
gpt4 key购买 nike

我正在尝试使用 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, QF14, QM20 QBL10 QF14 QM20
2 QBL1, QF4 QBL1 QF4 NA
3 QM10 NA NA QM10

不幸的是,我无法让正则表达式为此正确工作。我尝试过使用df %>% extract(question_codes, into = c("基础", "每两周", "每月"), "^(QBL[1-9].*)?, (QF[1-9]. *)?, (QM[1-9].*)?", 删除 = FALSE)

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

# A tibble: 3 x 4
question_codes Base Fortnightly Monthly
<chr> <chr> <chr> <chr>
1 QBL10, QF14, QM20 QBL10 QF14 QM20
2 QBL1, 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

关于r - Tidyr 与可选组分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67807641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com