我正在用R检查kaggle中的imdb电影数据集。
这是最小的repro数据集:
> 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
Run Code Online (Sandbox Code Playgroud)
请注意,具有相同导演的每一行具有相同的导演评级值。
我想列出导演,按等级排序,每位导演一行。以下代码有效:
> 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
Run Code Online (Sandbox Code Playgroud)
但是,当我知道一位董事的所有评级都相同时,计算均值似乎是浪费的。在R中执行此操作的更惯用/有效的方法是什么?
实际上,不需要分组和汇总,因为您只是在寻找不同的/唯一的条目。因此,dplyr选项为:
select(movies, -movie) %>%
distinct() %>%
arrange(desc(director_rating))
# director director_rating
#1 Dir 3 3000
#2 Dir 2 2000
#3 Dir 1 1000
Run Code Online (Sandbox Code Playgroud)
或者,如果您想保留其他列:
distinct(movies, director, .keep_all = TRUE) %>% # for dplyr >= 0.5.0
arrange(desc(director_rating))
# movie director director_rating
#1 Movie 4 Dir 3 3000
#2 Movie 2 Dir 2 2000
#3 Movie 1 Dir 1 1000
Run Code Online (Sandbox Code Playgroud)