Извлечение оценок и соответствующих дат из текста в R - PullRequest
3 голосов
/ 28 мая 2019

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

Вот мой пример данных:

mydf <- data.frame("bank_name"=c("Bank A","Bank B"), "records"=c("Rating: B-\nRating Range: Jun-08-2017 to Present\n\nRating: B\nRating Range: Jan-23-2013 to Jun-08-2017","Rating: BBB-\nRating Range: Oct-02-2018 to Present\n\nRating: B\nRating Range: Apr-06-2018 to Oct-02-2018\n\nRating: A\nRating Range: Jun-08-2007 to Jan-31-2008\n\nRating: CCC\nRating Range: Jan-23-2006 to Aug-08-2007"))

Вот то, что я ожидаю:

mydf2 <- data.frame("bank_name"=c("Bank A","Bank A","Bank B","Bank B","Bank B","Bank B"), "ratings"=c("B-","B","BBB-","B","A","CCC"),"date"=c("Jun-08-2017","Jan-23-2013","Oct-02-2018","Apr-06-2018","Jun-08-2007","Jan-23-2006"))

> mydf2
  bank_name ratings        date
1    Bank A    B-     Jun-08-2017
2    Bank A    B      Jan-23-2013
3    Bank B    BBB-   Oct-02-2018
4    Bank B    B      Apr-06-2018
5    Bank B    A      Jun-08-2007
6    Bank B    CCC    Jan-23-2006

Заранее спасибо!

1 Ответ

2 голосов
/ 28 мая 2019

Можно выбрать извлечение символов после столбца «Рейтинг», «Диапазон рейтинга» в столбце «Записи» с помощью str_extract_all в list и unnest list элементах

library(tidyverse)
mydf %>% 
  mutate(ratings = str_extract_all(records, "(?<=Rating: )[A-E-]+"), 
         date = str_extract_all(records, 
              "(?<=Rating Range: )[A-Z][a-z]{2}-\\d{2}-\\d{4}")) %>% 
  select(-records) %>%
  unnest
#  bank_name ratings        date
#1    Bank A      B- Jun-08-2017
#2    Bank A       B Jan-23-2013
#3    Bank B    BBB- Oct-02-2018
#4    Bank B       B Apr-06-2018
#5    Bank B       A Jun-08-2007
#6    Bank B     CCC Jan-23-2006
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...