Separar Texto de Números

Oi pessoal, bom dia!
Fiz a leitura de vários pdf’s com o pdftools::pdf_text(), e estou gerando um banco de dados pra ir armazenando os resultados… só que não consigo que os valores numéricos vão em uma outra coluna, diferente da textual…
Exemplo de saída:

Nome PDF; Descrição
PDF 1; Texto Exemplo 50,00
PDF 2; Novo Texto -50,00

Tentei utilizando o tidyr::separate, mas não consegui… Possivelmente estou errando na regex:

bd_organizado2<- separate(bd_organizado,Descrição,into=c("Descrição","Valor"),"^([a-zA-Z]+)(\\d+)")

A ideia é conseguir separar o campo Descrição, obtendo o seguinte dataframe:

Nome PDF; Descrição; Valor
PDF 1; Texto Exemplo; 50,00
PDF 2; Novo Texto; -50,00

Qual seria a melhor maneira de fazer isso?

1 curtida

Ozias,

Segue abaixo a minha solução para o problema:

library(tidyverse)

# Tabela exemplo
bd_organizado <- tribble(
  ~"Nome PDF", ~"Descrição",
  "PDF 1", "Texto Exemplo 50,00",
  "PDF 2", "Novo Texto -50,00"
)

# Separar os números e transformar em numérico
bd_organizado %>%
  separate(Descrição, c("Descrição", "Valor"), " (?=[0-9\\-\\,]+)") %>%
  mutate(Valor = parse_number(Valor, locale = locale(decimal_mark = ",")))
#> # A tibble: 2 x 3
#>   `Nome PDF` Descrição     Valor
#>   <chr>      <chr>         <dbl>
#> 1 PDF 1      Texto Exemplo    50
#> 2 PDF 2      Novo Texto      -50

Created on 2021-01-12 by the reprex package (v0.3.0)

1 curtida

Oi @clente, muito obrigado! Sua solução deu certo…

Só tive um problema em alguns casos… Por exemplo…

Nome PDF; Descrição
PDF 1; Texto Exemplo 50,00
PDF 2; Novo Texto -50,00
PDF 3; Texto Exemplo - Novo Texto 10,00

No caso dessa terceira linha, ele passou pro campo de valor essa outra parte, ficando assim.

Nome PDF; Descrição; Valor
PDF 1; Texto Exemplo; 50
PDF 2; Novo Texto; -50
PDF 3; Texto Exemplo; - Novo Texto

Teria alguma forma de ele só pegar o “-” se o que tiver após for algum número?

library(tidyverse)

# Tabela exemplo
bd_organizado <- tribble(
  ~"Nome PDF", ~"Descrição",
  "PDF 1", "Texto Exemplo 50,00",
  "PDF 2", "Novo Texto -50,00",
  "PDF 3", "Texto Exemplo - Novo Texto 10,00"
)

# Separar os números e transformar em numérico
bd_organizado %>%
  separate(Descrição, c("Descrição", "Valor"), " (?=[0-9\\-\\,]{2,})") %>%
  mutate(Valor = parse_number(Valor, locale = locale(decimal_mark = ",")))
#> # A tibble: 3 x 3
#>   `Nome PDF` Descrição                  Valor
#>   <chr>      <chr>                      <dbl>
#> 1 PDF 1      Texto Exemplo                 50
#> 2 PDF 2      Novo Texto                   -50
#> 3 PDF 3      Texto Exemplo - Novo Texto    10

Created on 2021-01-13 by the reprex package (v0.3.0)

1 curtida

Oi @clente, muito obrigado!
Só que ainda tô tendo um pequeno problema…

Alguns valores continuam não indo pro campo de valor

@clente consegui de uma maneira não muito prática rsrs… Mas deu certo…

Utilizei o mutate e o str_sub pra pegar os ultimos 10 caracteres do campo Descrição em uma nova variável…

Depois separei essa nova variável com a sua primeira orientação, utilizando o separate(Descrição, c("Descrição", "Valor"), " (?=[0-9\\-\\,]+)")

Em seguida, utilizando o str_remove_all removi todos os valores que ainda apareciam no campo de Descrição e após isso, removi os espaços extras de todas as variáveis…

Depois foi só passar pra numérico com o mutate(Valor = parse_number(Valor, locale = locale(decimal_mark = ",")))

E cheguei ao conjunto de dados que me interessava no final… Muito obrigado pela ajuda!! :slight_smile:

1 curtida