Свернуть все столбцы по столбцу идентификаторов [дубликаты]

На этот вопрос уже есть ответ:

Collapse / concatenate / объединить столбец в одну строку через запятую в каждой группе 2 ответа

Я пытаюсь сделать что-то похожее на что здесь ответили, что дает мне 80% пути. У меня есть фрейм данных с одним столбцом ID и несколькими информационными столбцами. Я хотел бы свернутьвс других столбцов, так что для каждого идентификатора есть только одна строка, а несколько записей разделяются, например, точкой с запятой. Вот пример того, что у меня есть и чего я хочу.

ИМЕЮТ

     ID  info1          info2
1 id101    one          first
2 id102   twoA second alias A
3 id102   twoB second alias B
4 id103 threeA  third alias A
5 id103 threeB  third alias B
6 id104   four         fourth
7 id105   five          fifth

ХОЧУ

     ID          info1                          info2
1 id101            one                          first
2 id102     twoA; twoB second alias A; second alias B
3 id103 threeA; threeB   third alias A; third alias B
4 id104           four                         fourth
5 id105           five                          fifth

Вот код, используемый для их генерации:

have <- data.frame(ID=paste0("id", c(101, 102, 102, 103, 103, 104, 105)),
                   info1=c("one", "twoA", "twoB", "threeA", "threeB", "four", "five"), 
                   info2=c("first", "second alias A", "second alias B", "third alias A", "third alias B", "fourth", "fifth"),
                   stringsAsFactors=FALSE)
want <- data_frame(ID=paste0("id", c(101:105)),
                   info1=c("one", "twoA; twoB", "threeA; threeB", "four", "five"), 
                   info2=c("first", "second alias A; second alias B", "third alias A; third alias B", "fourth", "fifth"),
                   stringsAsFactors=FALSE)

Этот вопро задавал в основном тот же вопрос, но только один столбец «информация». У меня есть несколько других столбцов, и я хотел бы сделать это для всех них.

Бонусные баллы за это с помощью dplyr.

Ответы на вопрос(5)

Ваш ответ на вопрос