2016-10-28 3 views
1

У меня есть список групп и имен, как показано ниже в DF. Я собираюсь упорядочить этот список по алфавиту и объединить каждое имя, разделенное запятой, как показано ниже в DF2. Я думал, что это будет просто, но это окажется более сложным, чем ожидалось!Сортировка списка имен по алфавиту

DF <- tibble::data_frame(
    Group = c(1, 1, 1, 2, 2, 3, 3, 3), 
    Name = c("A", "B", "C", "B", "A", "B", "C", "A")) 

DF2 <- tibble::data_frame(
    Group = c(1, 2, 3), 
    Name = c("A, B, C", "A, B", "A, B, C")) 

Я бы признателен за любую помощь в решении этого объяснить неизвестное количество имен, перечисленных в группе, с или без dplyr трубопровода.

Спасибо!

+1

Как 'DF%>% group_by (Group)%>% реферирования (Comb = паста (Name [заказ (Имя)], collapse = ",")) '? – Abdou

+1

@Abdou или 'DF%>% аранжировать (имя)%>% group_by (группа)%>% summary (Comb = toString (Name))' – Frank

+0

@Frank oh that's gooood! – Abdou

ответ

3

Мы можем использовать data.table

library(data.table) 
setDT(DF)[order(Name), .(Comb = toString(Name)) , by = Group] 
3

В базовой R:

aggregate(Name~Group, DF, function(x) paste0(sort(x), collapse = ",")) 

# Group Name 
#1  1 A,B,C 
#2  2 A,B 
#3  3 A,B,C 
Смежные вопросы