Найти и заменить числа в текстовом файле R - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь найти все предложения в текстовом файле в , в котором есть числа любого формата, и заменить их хэштегами вокруг них.

например, взять вход ниже:

ex <- c("I have $5.78 in my account","Hello my name is blank","do you want 1,785 puppies?", 
        "I love stack overflow!","My favorite numbers are 3, 14,568, and 78")

в качестве выхода функции, я ищу:

 > "I have #$5.78# in my account" 
 > "do you want #1,785# puppies?"
 > "My favorite numbers are #3#, #14,568#, and #78#"

Ответы [ 3 ]

1 голос
/ 24 марта 2020

Мы можем использовать gsub

gsub("(?<=\\s)(?=[$0-9])|(?<=[0-9])(?=,?[ ]|$)", "#", ex, perl = TRUE)
#[1] "I have #$5.78# in my account"                   "Hello my name is blank"                        
#[3] "do you want #1,785# puppies?"                   "I love stack overflow!"                        
#[5] "My favorite numbers are #3#, #14,568#, and #78#"
1 голос
/ 24 марта 2020

Окружающие числа являются прямыми, предполагая, что все с числом, точкой, запятой и знаком доллара все включено.

gsub("\\b([-$0-9.,]+)\\b", "#\\1#", ex)
# [1] "I have $#5.78# in my account"                   
# [2] "Hello my name is blank"                         
# [3] "do you want #1,785# puppies?"                   
# [4] "I love stack overflow!"                         
# [5] "My favorite numbers are #3#, #14,568#, and #78#"

Чтобы отфильтровать только пронумерованные записи:

grep("\\d", gsub("\\b([-$0-9.,]+)\\b", "#\\1#", ex), value = TRUE)
# [1] "I have $#5.78# in my account"                   
# [2] "do you want #1,785# puppies?"                   
# [3] "My favorite numbers are #3#, #14,568#, and #78#"
0 голосов
/ 24 марта 2020

Другой пошаговый подход заключается в использовании grep для идентификации элементов текстового файла, содержащего шаблон "[0-9]", подмножества текстовых элементов с номерами c, использующих ex[....], и использования оператора канала %>% из library(dplyr) для передачи подмножества в gsub, затем используйте @ r2evans 'logi c для размещения хештегов вокруг числовых c записей, как показано ниже:

library(dplyr) 
ex[do.call(grep,list("[0-9]",ex))] %>% gsub("\\b([-$0-9.,]+)\\b", "#\\1#",.)

The do.call(grep,list("[0-9]",ex)) часть кода возвращает индексы для текстовых элементов в ex с цифрами c записей.

Вывод

library(dplyr) 
ex[do.call(grep,list("[0-9]",ex))] %>% gsub("\\b([-$0-9.,]+)\\b", "#\\1#",.)

[1] "I have $#5.78# in my account"   "do you want #1,785# puppies?"                   
[3] "My favorite numbers are #3#, #14,568#, and #78#"
...