Я изучаю ИБМД фильм набор данных в kaggle с R.Group колонкой и сортировать по другой колонке в R
Вот минимальный набор данных репродукция:
> movies <- data.frame(movie = as.factor(c("Movie 1", "Movie 2", "Movie 3", "Movie 4")), director = as.factor(c("Dir 1", "Dir 2", "Dir 1", "Dir 3")), director_rating = c(1000, 2000, 1000, 3000))
> movies
movie director director_rating
1 Movie 1 Dir 1 1000
2 Movie 2 Dir 2 2000
3 Movie 3 Dir 1 1000
4 Movie 4 Dir 3 3000
Обратите внимание, что каждая строка, которая имеет тот же директор имеет такое же значение рейтинга для директора.
Я хочу перечислить директоров, отсортированных по рейтингу, и по одному ряду за директора. Следующий код работает:
> library(dplyr)
> movies %>%
group_by(director) %>%
summarize(director_rating = mean(director_rating)) %>%
arrange(desc(director_rating))
# A tibble: 3 x 2
director director_rating
<fctr> <dbl>
1 Dir 3 3000
2 Dir 2 2000
3 Dir 1 1000
Но, кажется расточительной для вычисления среднего значения, когда я знаю, что все рейтинги для одного директоров идентичны. Что является более идиоматическим/эффективным способом сделать это в R?
Просто используйте 'first' вместо' означает, 'вернуть первый рейтинг? – aichao
@aichao - да, это работает - я забыл о том, что «первый» доступен в R :-) – Anand
«каждая строка, имеющая того же директора, имеет такое же значение рейтинга для директора» - Fyi, это плохой способ для структурирования данных. У вас должны быть отдельные таблицы «фильмы» и «директора» с соответствующими атрибутами. Возможно, вам захочется прочитать мысли Хэдли о «аккуратных» данных: https://www.jstatsoft.org/article/view/v059i10/ – Frank