Как преобразовать текстовый вывод с новыми строками в кадр данных? - PullRequest
0 голосов
/ 11 апреля 2020

Это структура большого двоичного объекта текста, с которым я работаю:

reprEx <- "] WITHDRAWALS\nDATE DESCRIPTION AMOUNT\n04/01 Quickpay With Zelle Payment To Mike T 819018100 $1,450.00\n04/01 Quickpay With Zelle Payment To Mandy Doid 809012906 2,665.00"

Я бы хотел иметь возможность взять текст в каждой новой строке и отделить каждый элемент в строке, чтобы соответствующий столбец данных. Например, мне нужно, чтобы дата в каждой строке была в столбце DATE, описание транзакции - в столбце DESCRIPTION, а число перед концом строки должно быть помещено в столбец AMOUNT. Это пример моего желаемого результата в кадре данных.

desiredResult <- data.frame(DATE = c("04/01", "04/01"),
                            DESCRIPTION = c("Quickpay With Zelle Payment To Mike T 819018100", "Quickpay With Zelle Payment To Mandy Doid 819012906"),
                            AMOUNT = c("$1,450.00", "2,665.00"))

1 Ответ

2 голосов
/ 11 апреля 2020

Как насчет этого для начала? Это решение использует str_extract_all из пакета stringr:

desiredResult <- data.frame(
  DATE = unlist(str_extract_all(reprEx, "\\d{2}/\\d{2}")),
  DESCRIPTION = unlist(str_extract_all(reprEx, "(?<=[0-9]{2}/[0-9]{2}\\s)[\\s\\w$]+(?=\\d{1,3},\\d{3}\\.\\d{2})")),
  AMOUNT = unlist(str_extract_all(reprEx, "\\d{1,3},\\d{3}\\.\\d{2}"))
)

Вывод:

desiredResult
   DATE                                           DESCRIPTION   AMOUNT
1 04/01    Quickpay With Zelle Payment To Mike T 8090128100 $ 1,450.00
2 04/01 Quickpay With Zelle Payment To Mandy Dold 8090129906  2,665.00

Если вы хотите избавиться от знака доллара в столбце DESCRIPTION, вы можно сделать это:

desiredResult <- data.frame(
  DATE = unlist(str_extract_all(reprEx, "[0-9]{2}/[0-9]{2}")),
  DESCRIPTION = unlist(str_extract_all(reprEx, "(?<=[0-9]{2}/[0-9]{2}\\s)[\\s\\w]+(?=\\d{1,3},\\d{3}\\.\\d{2})|(?<=[0-9]{2}/[0-9]{2}\\s)[\\s\\w]+(?=\\$\\d{1,3},\\d{3}\\.\\d{2})")),
  AMOUNT = unlist(str_extract_all(reprEx, "\\d{1,3},\\d{3}\\.\\d{2}"))
)

Вывод:

desiredResult
   DATE                                           DESCRIPTION   AMOUNT
1 04/01     Quickpay With Zelle Payment To Mike T 8090128100  1,450.00
2 04/01 Quickpay With Zelle Payment To Mandy Dold 8090129906  2,665.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...