给定数据框中的一系列用户和他们观看的电影,我如何将用户观看的所有电影分组?
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)
所以,我有一个数据框,包含 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)