gpt4 book ai didi

R tidyr 正则表达式 : extract ordered numbers from character column

转载 作者:行者123 更新时间:2023-12-04 11:40:31 25 4
gpt4 key购买 nike

假设我有这样一个数据框

df <- data.frame(x=c("This script outputs 10 visualizations.", 
"This script outputs 1 visualization.",
"This script outputs 5 data files.",
"This script outputs 1 data file.",
"This script doesn't output any visualizations or data files",
"This script outputs 9 visualizations and 28 data files.",
"This script outputs 1 visualization and 1 data file."))

看起来像这样

                                                            x
1 This script outputs 10 visualizations.
2 This script outputs 1 visualization.
3 This script outputs 5 data files.
4 This script outputs 1 data file.
5 This script doesn't output any visualizations or data files
6 This script outputs 9 visualizations and 28 data files.
7 This script outputs 1 visualization and 1 data file.

有没有一种简单的方法,可以使用 Tidyverse 来提取每行的可视化数量和文件数量?当没有可视化(或没有数据文件,或两者都有)时,我想提取 0。基本上我希望最终结果是这样的

    viz   files
1 10 0
2 1 0
3 0 5
4 0 1
5 0 0
6 9 28
7 1 1

我试过用类似的东西

str_extract(df$x, "(?<=This script outputs )(.*)(?= visualizatio(n\\.$|ns\\.$))")

但是我迷路了。

最佳答案

我们可以在 str_extract 中使用正则表达式环视将一个或多个数字 (\\d+) 后跟一个空格和“vis”或“数据文件”提取为两个列

library(dplyr)
library(stringr)
df %>%
transmute(viz = as.numeric(str_extract(x, "\\d+(?= vis)")),
files = as.numeric(str_extract(x, "\\d+(?= data files?)"))) %>%
mutate_all(replace_na, 0)
# viz files
#1 10 0
#2 1 0
#3 0 5
#4 0 0
#5 0 0
#6 9 28
#7 1 0

在第一种情况下,模式匹配一​​个或多个数字 (\\d+),后跟一个正则表达式环视 ((?=),其中后跟一个空格通过 'vis' 单词和第二列,它提取数字后跟空格和单词 'file' 或 'files'

关于R tidyr 正则表达式 : extract ordered numbers from character column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515177/

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