R объединить содержимое ячейки, если условие истинно

Я хочу объединить содержимое двух ячеек, если выполняются несколько условий.

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

df <- data.frame(page = c("a1","a1","a2","a2","a3"),
                 keyword = c("a,b,c", "a,b,c,d", "d,e,f","g","a"))

Условия в псевдокоде:

if some cells of column page are equal (e.g. a1 and a2 appear two times)
then combine the content of column keyword and delete duplicate content. 

Это означает, что в конечном итоге мне нужен фрейм данных, который выглядит так:

page  keyword
  a1  a,b,c,d
  a2  d,e,f,g 
  a3  a

Я уже пробовал разные подходы, но не получил правильного результата. У кого-нибудь есть идея?

0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С data.table вы могли бы сделать

library(data.table)
setDT(df)
df[, .(unlist(strsplit(keyword, split = ","))), by = page
   ][, .(keyword = toString(unique(V1))), by = page]
#   page    keyword
#1:   a1 a, b, c, d
#2:   a2 d, e, f, g
#3:   a3          a

А вот вариант tidyr и dplyr.

library(dplyr); library(tidyr)

df %>% 
  separate_rows(keyword, sep = ",") %>% 
  group_by(page) %>% 
  summarise(keyord = toString(unique(keyword)))
# A tibble: 3 x 2
#  page  keyord    
#  <chr> <chr>     
#1 a1    a, b, c, d
#2 a2    d, e, f, g
#3 a3    a 

Очень красивое и простое решение! Большое спасибо!

nississippi 31.10.2018 13:17

Другие вопросы по теме