Использование tidyr::separate_rows в нескольких связанных строках

#r #tidyverse #tidyr

Вопрос:

У меня есть некоторые данные, которые я удалил из автономного источника с помощью некоторого программного обеспечения для распознавания текста. Это выглядит примерно так же, как приведенные ниже данные, но менее эльфийски.

 elvish_ring_holders_unclean <- tibble(
name=c("Gandalf", "Galadriel", "Elrond", "CirdannnGil-Galad"), 
city = c("Undying Lands","Lothlorien","Rivendell", "MithlondnnLindon"), 
race = c("Maiar", "Elf", "Elf", "ElfnnElf"))
 

Проблема для обоих наборов данных заключается в том, что некоторые строки были объединены вместе с пробелами. Что я бы предпочел, так это что-то вроде приведенных ниже данных, где каждое наблюдение имеет свою собственную строку

 elvish_ring_holders <- tibble(
name=c("Gandalf", "Galadriel", "Elrond", "Cirdan","Gil-Galad"), 
city = c("Undying Lands","Lothlorien","Rivendell", "Mithlond", "Lindon"), 
race = c("Maiar", "Elf", "Elf", "Elf", "Elf"))
 

До сих пор я пробовал подход tidyr::separate_rows

 elvish_ring_holders %>% 
  separate_rows(name, sep = "nn") %>% 
  separate_rows(city, sep = "nn") %>% 
  separate_rows(race, sep = "nn") %>% 
  distinct()
 

Но в итоге я получаю набор данных, в котором у Гил-Галада и Цирдана есть два наблюдения с двумя разными городами с одним истинным городом и одним ложным городом.
введите описание изображения здесь

В моих внешних данных моя переменная расы также может дублироваться таким образом, и данные содержат больше наблюдений. То, что я ищу, — это какой-то метод разделения строк, которые могут разделяться один раз по нескольким кольцам.

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

1. Вы показали свои данные и желаемый результат. Пожалуйста, покажите нежелательный результат, который вы тоже получаете.

2. Спасибо за совет @GuedesBF. Реализованный.

Ответ №1:

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

 elvish_ring_holders_unclean %>% 
  separate_rows(everything(), sep = "nn")
 
Имя город гонка
1 Гэндальф Бессмертные земли Майяр
2 Галадриэль Лотлориен Эльф
3 Элронд Ривенделл Эльф
4 Цирдан Митлонд Эльф
5 Гил-Галад Линдон Эльф

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

1. Это именно то, что я искал! Я понятия не имел, что через него можно протянуть несколько колов одновременно. Спасибо!

2. Да, именно так. Ты опередил меня в ударе