R: Слияние строк в одной таблице данных, объединение определенных столбцов

У меня есть таблица данных в R. Я хочу объединить строки, которые имеют идентичныеcustomerID, а затем объединить элементы других объединенных столбцов.

Я хочу перейти от этого:

   title  author customerID
1 title1 author1          1
2 title2 author2          2
3 title3 author3          1

к этому:

           title           author Group.1
1 title1, title3 author1, author3       1
2         title2          author2       2

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

Решение Вопроса

aggregate Функция должна помочь вам в поиске решения:

title1", "title2", "title3"),
                 author = c("author1", "author2", "author3"),
                 customerID = c(1, 2, 1))
aggregate(dat[-3], by=list(dat$customerID), c)
#   Group.1 title author
# 1       1  1, 3   1, 3
# 2       2     2      2

Или просто убедитесь, что вы добавляетеstringsAsFactors = FALSE когда вы создаете свой фрейм данных, и вы в значительной степени готовы к работе. Если ваши данные уже учтены, вы можете использовать что-то вродеdat[c(1, 2)] = apply(dat[-3], 2, as.character) сначала преобразовать их в символ, затем:

aggregate(dat[-3], by=list(dat$customerID), c)
#   Group.1          title           author
# 1       1 title1, title3 author1, author3
# 2       2         title2          author2
 09 июл. 2012 г., 12:50
@HarryPalmer, я не уверен, что понимаю ваш дополнительный вопрос. Предполагая, что вы назначили выводaggregate к другому объекту, скажемtemp, temp$title будет список (как этоlist(0` = c ("title1", "title3"),1 = "title2"). The title` иauthor столбцы в этом примере являются списками. Это то, что вы искали?
 Harry Palmer09 июл. 2012 г., 14:23
не берите в голову, я понял это - функция счастья!
 Harry Palmer09 июл. 2012 г., 11:43
Спасибо, это работает!
 Harry Palmer09 июл. 2012 г., 14:10
Хм, я думаю, что теперь я понимаю, спасибо. Я был смущен о типах данных. Пожалуйста, еще один вопрос: как я могу устранить дубликаты, которые появляются в элементе списка столбцов / строк после агрегации? Я попробовал data1 & lt; - уникальный (data2 $ title), но, что любопытно, это не сработало.

df <- data.frame(author=LETTERS[1:5], title=LETTERS[1:5], id=c(1, 2, 1, 2, 3), stringsAsFactors=FALSE)

uniqueIds <- unique(df$id)

mergedDf <- df[1:length(uniqueIds),]

for (i in seq(along=uniqueIds)) {
    mergedDf[i, "id"] <- uniqueIds[i]
    mergedDf[i, "author"] <- paste(df[df$id == uniqueIds[i], "author"], collapse=",")
    mergedDf[i, "title"] <- paste(df[df$id == uniqueIds[i], "title"], collapse=",")
}

mergedDf
#  author title id
#1    A,C   A,C  1
#2    B,D   B,D  2
#3      E     E  3
 06 июл. 2012 г., 19:22
@ mrdwab: спасибо, я не очень часто использую кадры данных и не знаюaggregate функция.
 06 июл. 2012 г., 19:20
Хорошо, но R имеет несколько встроенных функций для работы с сгруппированными данными. Лучшее в этом случаеaggregate(df[-3], by=list(df$id), c), ноby(df[-3], df$id, c) также дает вам тот же результат, только в совершенно другом формате.

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