因此,我有一个数据帧,包含userid和movieid,其中每一行代表一个用户和他观看的电影。类似于:
userid movieid
882359 81
882359 926
882359 1349
881235 27
我想要的是
userid movieid
882359 c(81,926,1349)
881235 c(27)
我怎样才能做到这一点?数据库相当大(800万行(,最后我想将其转换为二进制RatingMatrix。感谢您的帮助。
您可以使用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
(看起来输出相同,但类型不相同(
来自base R
的aggregate
选项
aggregate(cbind(films = movieid) ~ userid, df, FUN = I)