Агрегирование уникальных значений символов для группы в R - PullRequest
0 голосов
/ 31 августа 2018

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

У меня есть набор данных, который выглядит следующим образом: enter image description here

Основная проблема для меня заключается в том, что столбец Words может варьироваться от 1 до 52! Я думал разбить этот столбец на разные столбцы, а затем использовать group_by. Но сейчас я не уверен, как поступить.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Подход Base R с aggregate:

df <- data.frame(
    id = c(1:5, 6, 5),
    year = c(2011, 2011, 2010, 2010, 2009, 2010, 2009),
    uid = c(12, 12, 11, 12, 10, 11, 10),
    words = c("abc,cde", "efgh,cde", "bdfc,cde,pqrs", "abcd,cadde", "abc,cdefgh,lmx,abcd,ijklm,pqrs","bdfc,acca,ijklm", "efgh"),
    stringsAsFactors = FALSE
)

aggregate(df["words"], df[,c("year", "uid")], function(x) paste0(unique(unlist(strsplit(x, ","))), collapse=","))
0 голосов
/ 31 августа 2018

Мы можем разделить «Слова» на list из vector с, unnest в «длинном» формате, удалить повторяющиеся строки, сгруппированные по «Год», «UID», paste the ». Слова "в одну строку

library(dplyr)
df1 %>% 
    mutate(Words = strsplit(Words, ",")) %>% 
    unnest %>% 
    distinct(Year, UID, Words) %>% 
    group_by(UID, Year) %>% 
    summarise(Words = toString(Words))
# A tibble: 4 x 3
# Groups:   UID [?]
#    UID  Year Words                                    
#  <dbl> <dbl> <chr>                                    
#1    10  2009 ABC, CDEFGH, LMX, ABCD, IJKLM, PQRS, EFGH
#2    11  2010 BDFC, CDE, PQRS, ACCA, IJKLM             
#3    12  2010 ABCD, CADDE                              
#4    12  2011 ABC, CDE, EFGH       

данные

df1 <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 5), Year = c(2011, 2011, 
2010, 2010, 2009, 2010, 2009), UID = c(12, 12, 11, 12, 10, 11, 
10), Words = c("ABC,CDE", "EFGH,CDE", "BDFC,CDE,PQRS", "ABCD,CADDE", 
"ABC,CDEFGH,LMX,ABCD,IJKLM,PQRS", "BDFC,ACCA,IJKLM", "EFGH")),
 class = "data.frame", row.names = c(NA, -7L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...