Мы можем сгруппировать по 'RECORDID', выбрать элементы 'Phrase' с логическим индексом и summarise
по paste
, используя столбец 'ОБРАТНАЯ СВЯЗЬ'
library(dplyr)
library(stringr)
df1 %>%
filter(!is.na(FEEDBACK) & FEEDBACK != "") %>%
mutate(flag = str_detect(FEEDBACK, '^Phrase\\d+$')) %>%
group_by(RECORDID) %>%
summarise(NewColumn = toString(FEEDBACK[flag]),
FEEDBACK = toString(FEEDBACK[!flag]))
# A tibble: 1 x 3
# RECORDID NewColumn FEEDBACK
# <int> <chr> <chr>
#1 1234 Phrase1, Phrase2, Phrase3 notaPhrase but whole lots of words
ПРИМЕЧАНИЕ. В приведенном выше решении Мы буквально сопоставляем слова, показанные в посте ОП. Для подсчета количества слов используйте str_count
df1 %>%
filter(!is.na(FEEDBACK) & FEEDBACK != "") %>%
mutate(flag = str_count(FEEDBACK, '\\w+') == 1) %>%
group_by(RECORDID) %>%
summarise(NewColumn = toString(FEEDBACK[flag]),
FEEDBACK = toString(FEEDBACK[!flag]))
data
df1 <- structure(list(RECORDID = c(1234L, 1234L, 1234L, 1234L, 1234L
), FEEDBACK = c("Phrase1", "Phrase2", "Phrase3", "", "notaPhrase but whole lots of words"
)), class = "data.frame", row.names = c(NA, -5L))