Dúvida com stringr e unnest

Olá, pessoal. Tudo bem?

Tenho uma dúvida e espero que vocês possam ajudar. A dúvida é a seguinte:

Possuo a seguinte lista:

lista<- list(c("bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1000 114,20", 
       "bovespa v vis hype3f on nm 5 34,16 170,80 c subtotal : 5 34,1600 170,80", 
       "bovespa v vis meal3f on nm 20 7,48 149,60 c subtotal : 20 7,4800 149,60", 
       "bovespa v vis pmam3f on nm 5 28,79 143,95 c subtotal : 5 28,7900 143,95", 
       "bovespa v vis oibr3 on n1 200 0,94 188,00 c subtotal : 200 0,9400 188,00"), 
     c("bovespa c vis arzz3f on nm 2 48,70 97,40 d subtotal : 2 48,7000 97,40",   
       "bovespa c vis hype3f on nm 5 32,79 163,95 d subtotal : 5 32,7900 163,95", 
       "bovespa c vis meal3f on nm 20 8,79 175,80 d subtotal : 20 8,7900 175,80",
       "bovespa c vis pmam3f on nm 5 41,01 205,05 d subtotal : 5 41,0100 205,05", 
       "bovespa c vis oibr3 on n1 200 1,28 256,00 d subtotal : 200 1,2800 256,00"))

Meu objetivo é pegar tudo que está após a palavra “subtotal” e passar isso para um tibble que fique em colunas. Pois é, minha tentativa foi:

lista %>%
  purrr::map(str_extract, "(?<=subtotal : )(.*)(,[0-9]{2})") %>% 
  purrr::map(str_split, "[[:space:]]")

No entanto, não consigo fazer com que o output desse código acima, vire um data frame com colunas. Alguém tem ideia de como posso fazer isso?

library(tidyverse)

lista<- list(c("bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1000 114,20", 
               "bovespa v vis hype3f on nm 5 34,16 170,80 c subtotal : 5 34,1600 170,80", 
               "bovespa v vis meal3f on nm 20 7,48 149,60 c subtotal : 20 7,4800 149,60", 
               "bovespa v vis pmam3f on nm 5 28,79 143,95 c subtotal : 5 28,7900 143,95", 
               "bovespa v vis oibr3 on n1 200 0,94 188,00 c subtotal : 200 0,9400 188,00"), 
             c("bovespa c vis arzz3f on nm 2 48,70 97,40 d subtotal : 2 48,7000 97,40",   
               "bovespa c vis hype3f on nm 5 32,79 163,95 d subtotal : 5 32,7900 163,95", 
               "bovespa c vis meal3f on nm 20 8,79 175,80 d subtotal : 20 8,7900 175,80",
               "bovespa c vis pmam3f on nm 5 41,01 205,05 d subtotal : 5 41,0100 205,05", 
               "bovespa c vis oibr3 on n1 200 1,28 256,00 d subtotal : 200 1,2800 256,00"))

# versao nested
tabelinha <- tibble(
    id = 1:length(lista),
    lista = lista
) %>%
    mutate(
        subtotais = lista %>% 
            purrr::map(str_extract, "(?<=subtotal : )(.*)(,[0-9]{2})") %>% 
            purrr::map(str_split, "[[:space:]]")
    )

head(tabelinha)
#> # A tibble: 2 x 3
#>      id lista     subtotais 
#>   <int> <list>    <list>    
#> 1     1 <chr [5]> <list [5]>
#> 2     2 <chr [5]> <list [5]>

# dai vc poderia ir dando uns unnests se precisar
tabelinha_unnested <- tabelinha %>%
    unnest(lista) %>%
    unnest(subtotais) %>%
    unnest(subtotais) %>%
    mutate(
        subtotais = parse_number(subtotais)
    )

head(tabelinha_unnested)
#> # A tibble: 6 x 3
#>      id lista                                                          subtotais
#>   <int> <chr>                                                              <dbl>
#> 1     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…         2
#> 2     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…    571000
#> 3     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…     11420
#> 4     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…         5
#> 5     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…    341600
#> 6     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…     17080

# versao unnested
tabelinha <- tibble(
    id = 1:length(lista),
    texto = lista
) %>%
    unnest(texto) %>%
    mutate(
        subtotais = texto %>% str_extract("(?<=subtotal : )(.*)(,[0-9]{2})") %>% str_split("[[:space:]]")
    ) %>%
    unnest(subtotais) %>%
    mutate(
        subtotais = parse_number(subtotais)
    )

head(tabelinha)
#> # A tibble: 6 x 3
#>      id texto                                                          subtotais
#>   <int> <chr>                                                              <dbl>
#> 1     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…         2
#> 2     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…    571000
#> 3     1 bovespa v vis arzz3f on nm 2 57,10 114,20 c subtotal : 2 57,1…     11420
#> 4     1 bovespa v vis hype3f on nm 5 34,16 170,80 c subtotal : 5 34,1…         5
#> 5     1 bovespa v vis hype3f on nm 5 34,16 170,80 c subtotal : 5 34,1…    341600
#> 6     1 bovespa v vis hype3f on nm 5 34,16 170,80 c subtotal : 5 34,1…     17080

Created on 2020-09-17 by the reprex package (v0.3.0)

1 curtida