R: joining rows into the same data table, joining certain columns

I have a data table in R. I want to combine rows that have the same customerID , and then combine the elements of other joined columns.

I want to go from this:

  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 
+7
source share
2 answers

The aggregate function should help you find a solution:

 dat = data.frame(title = c("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 

Or just make sure you add stringsAsFactors = FALSE when you create your data frame and you are very good. If your data has already been accounted for, you can use something like dat[c(1, 2)] = apply(dat[-3], 2, as.character) to convert them to a character first, and then:

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

This may not be the best solution, but it’s easy to understand:

 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,CA,C 1 #2 B,DB,D 2 #3 EE 3 
+1
source

All Articles