объединение и создание новых столбцов на основе заданных значений - PullRequest
1 голос
/ 12 февраля 2020

У меня есть кадр данных, который имеет следующее:

RECORDID FEEDBACK
1234     Phrase1
1234     Phrase2
1234     Phrase3
1234     ""
1234     notaPhrase but whole lots of words

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

    RECORDID NewColumn                 FEEDBACK
    1234     Phrase1, Phrase2, Phrase3 notaPhrase but whole lots of words

Как я могу сделать это в R?

1 Ответ

0 голосов
/ 12 февраля 2020

Мы можем сгруппировать по '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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...