我的数据看起来像这样
Colour Q1 Q2 Q3
yellow 1 0 1
green 0 0 1
red 1 1 1
black 0 1 0
green 1 0 1
white 0 0 1
yellow 1 1 1
,我想要一个看起来像这样的表,所以我可以在ggplot2中绘制一些条形图,其中x轴有3个季度,每个季度有每种颜色的计数。我尝试了table()
(以及此处提出的其他建议),但是它给了我TRUE
和FALSE
,这只会使工作变得更加困难,因为我不知道如何处理。以使用ggplot2
绘制条形图。
Colour Q1 Q2 Q3
yellow 2 1 2
red 1 1 1
green 1 0 2
white 0 0 1
black 0 1 0
答案 0 :(得分:1)
我已经搜索过SO,但没有找到该问题的完全重复项。
OP请求:
...所以我可以在ggplot2中绘制一些条形图,其中x轴有3个季度,每个季度有每种颜色的计数。
为此,聚合不是这里的重点(ggplot2
具有处理不同统计信息的功能),但重塑以形成x轴:单独的列Q1
,Q2
和Q3
需要转换为季度数据的一列,而另外的Quarter
列将成为x轴。
对于从宽格式到长格式的重塑,我们可以使用
long <- tidyr::gather(raw_data, "Quarter", "Count", -Colour)
或
long <- data.table::melt(raw_data, "Colour", , "Quarter", "Count")
(仅提及一些选项)。
两者均以长格式返回新的数据集:
long
Colour Quarter Count 1 yellow Q1 1 2 green Q1 0 3 red Q1 1 4 black Q1 0 5 green Q1 1 6 white Q1 0 7 yellow Q1 1 8 yellow Q2 0 9 green Q2 0 10 red Q2 1 11 black Q2 1 12 green Q2 0 13 white Q2 0 14 yellow Q2 1 15 yellow Q3 1 16 green Q3 1 17 red Q3 1 18 black Q3 0 19 green Q3 1 20 white Q3 1 21 yellow Q3 1
现在,我们可以告诉ggplot()
Quarter
)放置条的位置,Colour
)Count
)。通过
library(ggplot2)
ggplot(long) +
aes(Quarter, Count, fill = Colour) +
geom_col() +
scale_fill_identity(guide = "legend")
raw_data <- data.table::fread("
Colour Q1 Q2 Q3
yellow 1 0 1
green 0 0 1
red 1 1 1
black 0 1 0
green 1 0 1
white 0 0 1
yellow 1 1 1")