Есть ли способ заменить повторяющийся узор конкретно в R? - PullRequest
1 голос
/ 17 апреля 2020

У меня есть какая-то строка, в которой есть слово и номер.

[1] "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee... sth ... \r\n0.646 0.030 0.030 0.015 1.253....

Как вы можете видеть, есть шаблон, в котором есть оплата, оплата. Моя конечная цель - сгруппировать слова, чтобы составить эту таблицу, используя функцию сканирования или еще (если у вас есть идеи, пожалуйста, ответьте с этим.)

Поэтому я попытался удалить все пустые, потому что функция сканирования (я думаю) идентифицируйте с некоторым пробелом в качестве стандартного для разделения слов группы.

Опять же, я хочу сделать эту строку такой:

[1] "\r\nfundcompanyfee \r\nsalesgrouppayment \r\nmanagementfirmfee \r\ntotalpayment \r\nsubtotalfee \r\nsyntheticfee... sth ... \r\n0.646 0.030 0.030 0.015 1.253....

Я пытался использовать функцию gsub следующим образом

 gsub("\r\n\\w\\w.*?fee|payment","\\w\\w",strings)

но результат был ужасен. он делает строку вроде этой

ww ww ww ww........ 0.646 0.030 0.030 ....

, то есть он не распознает \ w как слово ... просто переведите его в 'w' как есть!

Так что мне нужна помощь, чтобы справиться с этим. Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Попробуй это. Возможно, можно упростить, но это работает:

library(stringr)

strings <- "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee \r\n0.646 0.030 0.030 0.015 1.253"

# values
values <- stringr::str_extract_all(strings, "\\d+\\.\\d+")[[1]]
values <- paste0("\r\n", paste(values, collapse = " "))
# categories
categories <- stringr::str_extract_all(strings, "(\\r\\n\\w+\\s){1,2}\\r\\n(fee|payment)")[[1]] 
categories <- stringr::str_replace_all(categories, "(\\r\\n|\\s)", "")
categories <- paste(paste0("\r\n", categories), collapse = " ")
# merge
strings1 <- paste(categories, values)
strings1
#> [1] "\r\nfundcompanyfee \r\nsalesgrouppayment \r\nmanagementfirmfee \r\ntotalpayment \r\nsubtotalfee \r\nsyntheticfee \r\n0.646 0.030 0.030 0.015 1.253"

Создано в 2020-04-17 с помощью пакета Представить (v0.3.0)

0 голосов
/ 17 апреля 2020

вы можете попробовать это.

library(tidyverse)
strings <- "\r\nfund \r\ncompany \r\nfee \r\nsales \r\ngroup \r\npayment \r\nmanagement \r\nfirm \r\nfee \r\ntotal \r\npayment \r\nsubtotal \r\nfee \r\nsynthetic \r\nfee \r\n0.646 0.030 0.030 0.015 1.253"

strings %>% 
 gsub("\r\n", "", .) %>% 
 gsub("fee", "fee$", .) %>% 
 gsub("payment", "payment$", .) %>% 
 str_split(., pattern = "\\$", simplify = T) %>% 
 toString() %>% 
 gsub(",","\r\n", .)
[1] "fund company fee\r\n  sales group payment\r\n  management firm fee\r\n  total payment\r\n  subtotal fee\r\n  synthetic fee\r\n ... sth ... 0.646 0.030 0.030 0.015 1.253...."

Просто добавьте эту строку gsub(" ", "", .) %>% после функции разделения, если вы хотите удалить пробелы между словами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...