R: Merge of rows in same data table, concatenating certain columns

后端 未结 2 1237
北荒
北荒 2020-12-30 08:40

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

相关标签:
2条回答
  • 2020-12-30 08:54

    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
    
    0 讨论(0)
  • 2020-12-30 09:04

    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
    
    0 讨论(0)
提交回复
热议问题