给定数据框中的一系列用户和他们观看的电影,我如何将用户观看的所有电影分组?

Given a series of users and movies they watched in a data frame, how can I group all the movies the user watched?

所以,我有一个数据框,包含 userid 和 movieid,其中每一行代表一个用户和他看过的一部电影。类似于:

userid    movieid
882359    81
882359    926
882359    1349
881235    27

而我想要的是

userid     movieid
882359     c(81,926,1349)
881235     c(27)

我怎样才能做到这一点?数据库非常大(800 万行),最后我想将其转换为 binaryRatingMatrix。任何帮助表示赞赏。

您可以使用 data.table:

library(data.table)
setDT(df)
df[, .(films = paste(movieid, collapse = ",")), by = "userid"]

   userid       films
1: 882359 81,926,1349
2: 881235          27

如果您更喜欢存储到 list 而不是字符向量:

df[, .(films = list(movieid)), by = "userid"]
   userid          films
1: 882359   81, 926,1349
2: 881235             27

(看似一样的输出但类型不一样)

aggregate 来自 base R

的选项
aggregate(cbind(films = movieid) ~ userid, df, FUN = I)