Я пытаюсь раскрутить два столбца, которые не всегда имеют одинаковое количество значений в ячейке, а затем объединить значения, которые соответствуют между двумя столбцами.Например:
library('dplyr')
library('tidyr')
#Sample Data
df <- data.frame(id = c(1:4),
first.names = c('Michael, Jim', 'Michael, Michael', 'Creed', 'Creed, Jim'),
last.names = c('Scott, Halpert', 'Scott, Cera', '', 'Halpert'))
Не все значения в df $ first.names связаны со значением в df $ last.names.Я пытаюсь получить следующие результаты:
#Desired output
df.results <- data.frame(id = c(1,1,2,2,3,4,4),
first.names = c('Michael', 'Jim', 'Michael', 'Michael', 'Creed', 'Creed', 'Jim'),
last.names = c('Scott', 'Halpert', 'Scott', 'Cera', '', '', 'Halpert'),
full.names = c('Michael Scott', 'Jim Halpert', 'Michael Scott', 'Michael Cera', 'Creed', 'Creed', 'Jim Halpert'))
Я пытался использовать unnest, он работает для first.names, но не для last.names (он пропускает строку, где last.names пусто):
#convert to characters
df$first.names <- as.character(df$first.names)
df$last.names <- as.character(df$last.names)
#Unnest first names
df <- df %>%
transform(first.names = strsplit(first.names, ',')) %>%
unnest(first.names)%>%
transform(last.names = strsplit(last.names, ',')) %>%
unnest(last.names)
Затем я собирался удалить повторяющиеся строки, но это по-прежнему не решает проблемы со значениями в df $ first.names, которые не имеют значения в df $ last.names
Есть ли лучший способ сделать это?