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

标签 r regex tidyr regex-lookarounds

假设我有这样一个数据框

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/

相关文章:

r - 在R中绘制频率密度直方图

java - @Pattern 正则表达式不检查空值

r - 填充 R data.frame 中每行中缺失的元素

r - 具有显式默认命名空间的 XML 文档的 XPath 和命名空间规范

R:是否有一种简单有效的方法来取回 block 对角矩阵的构建 block 矩阵列表?

R:S3 方法调度取决于参数

PHP:使用 DOM 或 REGEX 以非侵入方式填写表单输入

php - 用匹配索引替换字符串中的序列

r - 如何在 R 中安装 pivot_long() 和 pivot_wide()

r - 计算一个数据框中各个值的均值,合并到第二个数据框中