Как применить группу за функцией внутри функции канала, чтобы не вызывать ошибок? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу построить график, используя базу данных imdb_csv. Я хочу посмотреть, как с годами менялись imdb_ratings для анимационных фильмов, но у меня проблема с группировкой фильмов по годам. Мне как-то удалось заставить функцию group_by работать, но только если я запустил уже новый pipe в функции. Если я выполнял группировку по годам в функции конвейера, где я отфильтровал некоторые результаты (в первом фрагменте), то я получил ошибку «Анимация не найдена». Но проблема со вторым блоком состоит в том, что, хотя я применил функцию выбора, я получаю только два столбца, год и средний рейтинг за год. Также странно то, что на консоли строка summarise(mean(as.numeric(imdbRating))) всегда показана ниже любой строки, которую я выполняю.

Код:

imdb_ratings <- imdb_ratings %>% filter(Animation == 1 & !str_detect(title, "\\\\$")) %>% 
                                 extract(title, c("title", "year"), 
                                         "^(.*?)(?:\\s*\\([^()]*?(\\d{4})[^()]*\\))?$")  


imdb_ratings <- imdb_ratings %>% select(title, imdbRating, year) %>% 
                                 group_by(year) %>% 
                               mutate(n = n()) %>% 
                               summarise(mean(as.numeric(imdbRating)))

Это результат, который я получаю :

dput:

structure(list(year = c(1930, 1933, 1934, 1937, 1938, 1939, 1940, 
1942, 1943, 1944, 1946, 1947, 1949, 1950, 1951), `mean(as.numeric(imdbRating))` = c(55, 
53, 58, 74, 67, 65.5, 74, 62.66667, 68.5, 63, 66.25, 65, 72, 
69.5, 71)), row.names = c(NA, -15L), class = c("tbl_df", "tbl", 
"data.frame"))

Я не понимаю, почему, даже если я выбрал title, imdbRating, он показывает только итоги и год. Также как я могу переименовать функцию суммирования?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы выбрали title, но с ним вы никогда ничего не сделаете. Если вы хотите сохранить заголовок в результатах, включите его в функцию group_by.

group_by(title, year) %>% 

Фактически вам не нужен начальный оператор выбора, поскольку функция суммирования будет включать только сгруппированные столбцы. и суммированные столбцы в результатах, опуская каждый второй столбец.

Что касается общего числа n, после того как вы сгруппировали по названию и году, это даст вам количество оценок для анимационных фильмов для каждого заголовка и для каждого года. Если это то, что вы хотите, а затем включить его в функцию суммирования, вам не нужно мутировать. Таким образом, вы можете обойтись просто:

imdb_ratings <- imdb_ratings %>% group_by(title, year) %>%
    summarise(n=n(), Mean_rating = mean(as.numeric(imdbRating)))

Хороший график c будет потоковым графиком:

enter image description here

Если вам не нужен заголовок в результатах (в чем я сомневаюсь, потому что у вас было много хлопот при его извлечении), затем опустите его в group_by. Общее число n будет тогда общим количеством оценок для ВСЕХ анимационных фильмов в год, и у вас не будет названия в результатах (аналогично изображенному вами изображению).

Относительно странного появление на консоли summarise(mean(as.numeric(imdbRating))) ниже любой строки, которую вы выполняете ... Я думаю, вам просто нужно вручную удалить ее с помощью кнопки на клавиатуре. (Ctrl + L не очистит его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...