R list сохранить как цитируемый список

Хотите сохранить список предсказаний Recommenderlab как список "" разделенного списка. У меня есть один вопрос к тому же, но здесь я хочу расширить его с изюминкой.

Я уже испробовал несколько подходов и нашел их ниже как относящиеся к делу, но застрял на простом шаге ввода результата вывода в "" сценарий с разделением запятыми.

library("recommenderlab")
library(stringi)
data("MovieLense")
MovieLense100 <- MovieLense[rowCounts(MovieLense) >100,]
MovieLense100
train <- MovieLense100[1:50]
rec <- Recommender(train, method = "UBCF")
rec
pre <- predict(rec, MovieLense100[101:105], n = 10)
as(pre, "list")

list1 = as(pre, "list")

cat(paste0(shQuote(list1[["291"]]),collapse=","))

Вышеуказанное дает мне для данного пользователя:

"Titanic (1997)","Contact (1997)","Alien (1979)","Amadeus (1984)","Godfather, The (1972)","Aliens (1986)","Sting, The (1973)","American Werewolf in London, An (1981)","Schindler's List (1993)","Glory (1989)"

Я хочу поместить пользователя и фильмы в dataframe, где первый столбец будет пользователем, а второй столбец будет фильмами в вышеупомянутой сцепленной форме

1 ответ

Решение

При условии cat(paste0(shQuote(list1[["291"]]),collapse=",")) создает строку рекомендаций фильма, можно сделать следующее, чтобы превратить это в фрейм данных, помеченный именем:

movies <- cat(paste0(shQuote(list1[["291"]]),collapse=","))
theData <- data.frame(name="Santhosh",movies,stringsAsFactors=FALSE)

Другой подход заключается в сохранении каждого фильма в виде отдельного столбца во фрейме выходных данных, что упростит использование данных в R без необходимости многократного анализа списка фильмов. Тидиверс (т.е. tidyr а также dplyr) может использоваться для создания этого фрейма данных.

library(tidyr)
library(dplyr)
recommendedMovies <- c("Titanic (1997)","Contact (1997)","Alien (1979)","Amadeus (1984)","Godfather, The (1972)","Aliens (1986)","Sting, The (1973)","American Werewolf in London, An (1981)","Schindler's List (1993)","Glory (1989)")
theData <- data.frame(name="Santhosh",
                      rank=1:length(recommendedMovies),
                      movies=recommendedMovies,stringsAsFactors=FALSE)
theData %>% group_by(name) %>%
spread(.,rank,movies,sep="movie")

... и вывод:

> theData %>% group_by(name) %>%
+ spread(.,rank,movies,sep="movie")
# A tibble: 1 x 11
# Groups:   name [1]
  name  rankmovie1 rankmovie2 rankmovie3 rankmovie4 rankmovie5 rankmovie6 rankmovie7 rankmovie8 rankmovie9
  <chr> <chr>      <chr>      <chr>      <chr>      <chr>      <chr>      <chr>      <chr>      <chr>     
1 Sant… Titanic (… Contact (… Alien (19… Amadeus (… Godfather… Aliens (1… Sting, Th… American … Schindler…
# ... with 1 more variable: rankmovie10 <chr>
> 
Другие вопросы по тегам