我有一个学生的数据,其中包括他们独特的身份证,名字和考试成绩。
我试图在GGPlot中绘制学生ID及其考试成绩,并按学生id排序(图中应以学生姓名为x轴,考试成绩为y,并应按id的升序排列)。
另外要注意的是,有些考试成绩是重复的(即两个学生在一次考试中可以得到相同的分数)。
我已经知道如何绘制它了--我只是尝试按单个ID列按升序排序。我该怎么做呢?谢谢!
示例:
ID name test1score test2score
1 ted 92 94
2 jan 95 89
3 rob 92 96
4 jenny 92 94
5 risa 83 94
6 blake 80 90
7 court 77 89
8 aaron 98 83
9 austin 83 84
发布于 2020-02-06 22:22:14
若要根据学生ID对条形图进行排序,并以正确的顺序排列学生姓名,您可以首先根据“学生ID”重新排列数据,然后修复变量"name“的因子级别。
有多个wyas来完成它,在这里,我使用dplyr
包进行操作。(注意:我使用了来自pivot_longer
包的tidyr
函数将您的数据修改为更适合ggplot2
的更长格式)
library(tidyverse)
df %>% arrange(ID) %>%
mutate(name = factor(name, unique(name))) %>%
pivot_longer(.,-c(ID,name), names_to = "var", values_to = "val")
# A tibble: 18 x 4
ID name var val
<int> <fct> <chr> <int>
1 1 ted test1score 92
2 1 ted test2score 94
3 2 jan test1score 95
4 2 jan test2score 89
5 3 rob test1score 92
6 3 rob test2score 96
7 4 jenny test1score 92
8 4 jenny test2score 94
9 5 risa test1score 83
10 5 risa test2score 94
11 6 blake test1score 80
12 6 blake test2score 90
13 7 court test1score 77
14 7 court test2score 89
15 8 aaron test1score 98
16 8 aaron test2score 83
17 9 austin test1score 83
18 9 austin test2score 84
然后,将所有内容传递给ggplot2
,给出如下的情节:
library(tidyverse)
df %>% arrange(ID) %>%
mutate(name = factor(name, unique(name))) %>%
pivot_longer(.,-c(ID,name), names_to = "var", values_to = "val") %>%
ggplot(aes(x = name, y = val, fill = var))+
geom_col(position = position_dodge())
它能回答你的问题吗?
https://stackoverflow.com/questions/60108031
复制