Учитывая серию пользователей и фильмы, которые они смотрели в кадре данных, как я могу сгруппировать все фильмы, которые просмотрел пользователь? - PullRequest
1 голос
/ 04 мая 2020

Итак, у меня есть фрейм данных с идентификатором пользователя и movieid, где каждая строка представляет пользователя и mov ie, который он смотрел. Что-то вроде:

userid    movieid
882359    81
882359    926
882359    1349
881235    27

И что я хочу, это

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

Как я могу выполнить sh это? База данных довольно большая (8 миллионов строк), и в конце я хотел бы преобразовать ее в binaryRatingMatrix. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вы можете использовать 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

(похоже, тот же вывод, но типы не совпадают)

0 голосов
/ 04 мая 2020

Опция с aggregate из base R

aggregate(cbind(films = movieid) ~ userid, df, FUN = I)
...