Объединение различных отдельных строк текста и сортировка их по определенному шаблону - PullRequest
0 голосов
/ 08 апреля 2019

Со всеми путаницами, это вопрос:

data = readLines("file.txt")
# data reads
[1] "JESSICA [Day 1, 9:00 A.M.]: When there is sun, there was darkness."
[2] " However, nobody knew it was happening."
[3] " SAM [Day 1, 9:01 A.M.]: I thought it was not true."
[4] " But it was."
[5] " I thought it was "present" but it wasn't."

То, что я пытаюсь сделать, это: (1) объединить текст по имени (JESSICA, SAM).

Я могу определить имена в данных

test = regexpr("^([A-Z]+ \\[)",data)
names = regmatches(data,test)
final.name = sub("\\[","",names)

[1] "JESSICA" "SAM"

Я могу определить дату и время в данных

test = regexpr("\\[(.*)\\]", data)
time = regmatches(data,test)

[1] "[Day 1, 9:00 A.M.]" "[Day 1, 9:01 A.M.]"

У меня возникли трудности с объединением разных строк для каждого имени. То есть вместо этого:

[1] "JESSICA [Day 1, 9:00 A.M.]: When there is sun, there was darkness."
[2] " However, nobody knew it was happening." 

Я хочу, чтобы каждая строка была:

[1] "JESSICA [Day 1, 9:00 A.M.]: When there is sun, there was darkness. However, nobody knew it was happening."
[2] " SAM [Day 1, 9:01 A.M.]: I thought it was not true. But it was. I thought it was "present" but it wasn't."

1 Ответ

0 голосов
/ 08 апреля 2019

Логика похожа на теперь удаленный ответ @Maurits.Мы можем создавать группы на основе вхождения final.name и summarise текста, вставляя их в одну группу.Я считал data фреймом данных с 1 столбцом, поскольку он легче обрабатывать, чем простые строки.

library(dplyr)

data %>%
  group_by(group = cumsum(grepl(paste0(final.name, collapse = "|"), statement))) %>%
  summarise(statement = paste0(statement, collapse = " ")) %>%
  ungroup() %>%
  select(-group)


#statement                                                                                                 
#    <chr>                                                                                                     
#1 JESSICA [Day 1, 9:00 A.M.]: When there is sun, there was darkness.  However, nobody knew it was happening.
#2 SAM [Day 1, 9:01 A.M.]: I thought it was not true.  But it was.  I thought it was present but it wasn't.  

Используя базовый подход R, мы можем использовать aggregate

aggregate(statement~cumsum(grepl(paste0(final.name, collapse = "|"), statement)), 
                    data, paste0, collapse = " ")[2]

данные

data <- data.frame(statement = c(
       "JESSICA [Day 1, 9:00 A.M.]: When there is sun, there was darkness.",
       " However, nobody knew it was happening.",
       "SAM [Day 1, 9:01 A.M.]: I thought it was not true.",
       " But it was.",
       " I thought it was present but it wasn't."))

final.name <- c("JESSICA", "SAM")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...