Поскольку ваши записи всегда "Лицо А" (или Лицо Б) и оканчиваются датой, в формате ГГГГ-ММ-ДД ЧЧ: ММ, я бы использовал регулярное выражение, например:
library(stringr)
date_match="\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}"
col_a=str_match_all(chat_messenger,
paste0("(?<=\n|^)Person A\\s*\n([\\s\\S]*?)\n",date_match, sep="")
)[[1]][,2]
col_b=str_match_all(chat_messenger,
paste0("(?<=\n)Person B\\s*\n([\\s\\S]*?)\n",date_match, sep="")
)[[1]][,2]
col_a
col_b
Что дает в результате:
> col_a
[1] "Coolcool " "You called Person B \nDuration: 30 seconds "
[3] "Hey! "
> col_b
[1] "See you later \n:D " ". \nWhat's up? "
Для лучшего понимания соответствия регулярному выражению:
Я разделю эту строку:
(? <= \ n | ^) Персона A \ s * \ n ([\ s \ S] *?) \ n </p>
(?<=\n|^)
ищет что-то, чему предшествует пробел или начало документа на случай, если вы будете использовать слова «Персона А» в чате.
Person A\\s*\n
: ищет имя, за которым следуют пробел (не менее 0) и разрыв строки
([\\s\\S]*?)
: извлечение всего, включая разрывы строк
\n
: остановить извлечение до разрыва строки