r - 按列分组并按 R 中的另一列排序

标签 r dplyr kaggle

我正在用 R 检查 kaggle 中的 imdb 电影数据集。

这是一个最小的再现数据集:

> 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 中执行此操作的更惯用/有效的方法是什么?

最佳答案

实际上没有必要分组和总结,因为您只是在寻找不同/独特的条目。因此,dplyr 选项是:

select(movies, -movie) %>% 
  distinct() %>% 
  arrange(desc(director_rating))
#  director director_rating
#1    Dir 3            3000
#2    Dir 2            2000
#3    Dir 1            1000

或者,如果您想保留其他列:
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

关于r - 按列分组并按 R 中的另一列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39470731/

相关文章:

r - 更改 R 雷达图中的标签颜色

python - Pandas read_csv 无法正确加载逗号分隔的 CSV

machine-learning - 数据集在循环变量列表时抛出 KeyError

r - 无法解决 Kaggle 内核中发生的 In h2o 错误

r - `lm`摘要未显示所有因子水平

r - 绘制 R 中两个有序列表之间排名变化的最简单方法?

r - 如何将gather() 与多个x 变量一起使用?

r - 从 df 中删除包含相同字符串的字符向量

r - 使用 dplyr 中的排列()按时间顺序对月份进行排序

r - dplyr tidyeval 相当于下划线函数版本