I have my data table in R. I want to merge rows which have an identical customerID
, and then concatenate the elements of other merged columns.
I want to
Maybe not the best solution but 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,C A,C 1
#2 B,D B,D 2
#3 E E 3
The aggregate
function should help you in finding 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 are creating your data frame and you're pretty much good to go. If your data are already factored, you can use something like dat[c(1, 2)] = apply(dat[-3], 2, as.character)
to convert them to character first, then:
aggregate(dat[-3], by=list(dat$customerID), c)
# Group.1 title author
# 1 1 title1, title3 author1, author3
# 2 2 title2 author2