假设我有这样一个数据框

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'


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!