r - 在ggplot2中计数
问题描述
我是 R 新手,希望获得一些帮助/解释,说明为什么我的代码正在做它正在做的事情。我已经开始做 Tidy Tuesday 项目来更好地学习 R,这就是数据的来源。整洁的星期二信息
目标: 我想要做的最终结果是按照哪个国家的跑步者从数据中获得最多第一名的成绩对我的条形图进行排序,并且只显示前 10 名。
思考过程 在我的脑海中,这将如何发生是让 R 将国家的每个实例相加并将其保存到一个变量中。
所以我的第一次尝试是返回这个:
top_N 是我在谷歌搜索时发现的,但如果我把它拿出来,它看起来确实不错,只是不限于前十名。
问题:
- 我是否正确使用重新排序来控制国籍的顺序?
- 限制显示哪些结果的最佳方法是什么?
- 代码中究竟在哪里计算每个国籍?我认为这是总和,但不是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")
解决方案
尝试这个:
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")
推荐阅读
- python - Json 文件以 b- 开头
- python - 如何知道哪个子模块与 python 模块一起使用?无法为 docker 镜像创建 requirements.txt
- java - 当单击 JTable 单元格内的 JComboBox 时,JComboBox 在 JTable 之外消失
- python - 有没有办法使用一个命令设置图中所有文本的格式?
- javascript - Is possible to disable fill payment forms for the entire body (including a inner iFrame)?
- sql - Cannot resolve column from input columns after second join
- twilio - Line Feed in Autopilot Actions JSON
- php - php-fpm 由 2 个用户运行导致权限问题
- css - Bootstrap 4 如何重叠响应堆叠的两个 Div
- git - How do i get the target branch of a commit using git log command