首页 > 解决方案 > 在ggplot2中计数

问题描述

我是 R 新手,希望获得一些帮助/解释,说明为什么我的代码正在做它正在做的事情。我已经开始做 Tidy Tuesday 项目来更好地学习 R,这就是数据的来源。整洁的星期二信息

目标: 我想要做的最终结果是按照哪个国家的跑步者从数据中获得最多第一名的成绩对我的条形图进行排序,并且只显示前 10 名。

思考过程 在我的脑海中,这将如何发生是让 R 将国家的每个实例相加并将其保存到一个变量中。

所以我的第一次尝试是返回这个:

带有 top_N 的 R 图

top_N 是我在谷歌搜索时发现的,但如果我把它拿出来,它看起来确实不错,只是不限于前十名。

没有top_N的R图

问题:

  1. 我是否正确使用重新排序来控制国籍的顺序?
  2. 限制显示哪些结果的最佳方法是什么?
  3. 代码中究竟在哪里计算每个国籍?我认为这是总和,但不是100%肯定。我发现的大多数例子都将它用于数值,而不是字符串,这让我有点困惑。
library(tidyverse)
library(ggplot2)
library(readr)
library(dplyr)

ultra_rankings <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-10-26/ultra_rankings.csv')
race <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-10-26/race.csv')

ultra_rankings %>%
  filter(rank == '1') %>% #Only looks at rows that have a first place finish
  top_n(10, nationality) %>% #I think this is what is throwing me off
  ggplot(aes(x = reorder(nationality, -rank, sum), y = rank))+geom_bar(stat = "identity")+
  labs(title = "First Place Rankings by Country", caption = "Data from runrepeat.com")+
  theme(plot.title = element_text(hjust = .5))+ylab("Total First Place Finishes")+xlab("Runner Nationalities")

标签: r

解决方案


尝试这个:

gt <- ultra_rankings %>% filter(rank==1) %>% group_by(nationality) %>% count(nationality) %>%arrange(-n) %>% head(10)

然后我们必须更改因子以保留排序顺序

gt$nationality <- factor(gt$nationality, levels = unique(gt$nationality))

现在可以绘制:

ggplot(data=gt,aes(x=nationality,y=n))+geom_bar(stat="identity")


推荐阅读