Как разбить одно наблюдение на несколько наблюдений?

#r #text

Вопрос:

Вот мои данные

 title <- c("title1","title2")
text <- c("Mr.A.Speech1.\nMr.B.Speech2.\nMr.C.Speech3\n","Mrs.D.Speech4.\nMs.E.Speech5.\n")
df<- data.frame(title, text)
 

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

      Title    Name.     Text
1.   title1   Mr.A      Speech1.
2.   title1   Mr.B      Speech2.
3.   title1   Mr.C      Speech3.
4.   title1   Mrs.D     Speech4.
5.   title1   Ms.E      Speech5.
 

Я могу разбить только одно наблюдение текста, например, на разбивку

 name <- unlist(str_extract_all(df$text,"\bM(?:rs?|s)\.\s[:upper:]{1,20}\s?c?'?-?[:upper:]{1,20}\s?o?f?\s?|The\sSPEAKER|The\sPRESIDING\s" ))
##breakdown speeches and remove content before the first name
pattern = "\bM(?:rs?|s)\.\s[:upper:]{1,20}\s?c?'?-?[:upper:]{1,20}\s?o?f?\s?|The\sSPEAKER|The\sPRESIDING\s"
df$text1 <- str_replace_all( df$text, pattern, "XXXX")
df$text2 <- gsub("^.*?XXXX","XXXX",df$text1)
dfa <- df[which(grepl("XXXX",df$text2)), ]

speech1 <- unlist(strsplit(df$text2, "XXXX"))
speech2 <- speech1[-1]
Text <- gsub("[\]", " ", speech2)
 

Как я могу добавить метку заголовка для каждой строки и применить разбивку для всего столбца? Спасибо!

Комментарии:

1. Код, который у тебя есть, не работает для меня. nametest возвращает character(0) и, следовательно dftest , не имеет строк.

2. Мне очень жаль, и ты прав. Я просто поместил свой код (очень длинный) для моего реального набора данных в вопрос. Я использовал df1 <- dfa %>% separate_rows(text2, sep =»XXXX»)%<- dfa %>>% фильтр(text2 != «») и получил результаты. Большое спасибо!

Ответ №1:

Не лучшее решение, но регулярное выражение-не моя сильная сторона

 df %>% 
  separate_rows(text,sep = "\\n") %>%
  filter(text != "") %>% 
  separate(col = text,into = c("name","aux","text"),sep = "\.") %>% 
  mutate(name = paste(name,aux,sep = ".")) %>% 
  select(-aux)

# A tibble: 5 x 3
  title  name  text   
  <chr>  <chr> <chr>  
1 title1 Mr.A  Speech1
2 title1 Mr.B  Speech2
3 title1 Mr.C  Speech3
4 title2 Mrs.D Speech4
5 title2 Ms.E  Speech5