5

我是 R 和 ggplot2 的新手。我有一个包含饮料消费数据的 csv 文件。第一列是年份,然后接下来的 9 列是饮料类型,如咖啡、茶、苏打水等,其值为该行的年份值的消费金额。数据涵盖了 41 年的时间。我一直在研究这个并尝试了很多事情。我可以使用 ggplot 轻松为任何一种饮料创建点图。

但是,我想为每个图在 x 轴上创建带有年份的水平堆叠点图。所以,会有一个情节用于咖啡,然后在它的正下方,一个用于茶等。我想我想使用构面。我还在想我想要重组我的数据,使其有 3 列:一列用于年份,一列用于“类别”(即咖啡、茶、苏打水等),最后一列用于价值。我的想法是,一旦我以这种形式获得数据,那么使用刻面应该是直截了当的。

问题是,我似乎无法弄清楚如何以那种形式获取我的数据。以下是前几行数据的外观:

Year    Whole Milk  Other Milk  Total Milk  Tea Coffee  Diet Soda   Regular Soda    Total Soda  Juice
1970    25.5    5.8 31.3    6.8 33.4    2.1 22.2    24.3    5.5
1971    25  6.3 31.3    7.2 32.2    2.2 23.3    25.5    5.8
1972    24.1    6.9 31  7.3 33.6    2.3 23.9    26.2    6

有人能帮我吗?

dput的数据是:

structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3, 
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1, 
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3, 
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk", 
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda", 
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA, 
-3L))
4

1 回答 1

6

我有一句我经常用于 ggplot2 的说法,“当有疑问时,融化”。在 reshape 包中有一个函数 melt(),它就是这样做的。

tmp <- structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3, 
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1, 
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3, 
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk", 
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda", 
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA, 
-3L))

library(reshape) 

melt(tmp, id.vars="Year")

 Year     variable value
1  1970   Whole Milk  25.5
2  1971   Whole Milk  25.0
3  1972   Whole Milk  24.1
4  1970   Other Milk   5.8
5  1971   Other Milk   6.3
6  1972   Other Milk   6.9
7  1970   Total Milk  31.3
8  1971   Total Milk  31.3
9  1972   Total Milk  31.0
10 1970          Tea   6.8
11 1971          Tea   7.2
12 1972          Tea   7.3
13 1970       Coffee  33.4
...
于 2012-10-11T20:26:14.110 回答