Я хочу объединить содержимое двух ячеек, если выполняются несколько условий.
У меня есть следующий фрейм данных:
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
Я уже пробовал разные подходы, но не получил правильного результата. У кого-нибудь есть идея?
С 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
Очень красивое и простое решение! Большое спасибо!