重构r和ggplot2的csv数据

时间:2012-10-11 20:18:36

标签: r ggplot2

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

但是,我想在每个图的x轴上创建水平堆积点图。所以,咖啡的情节,然后在咖啡的正下方,咖啡的情节等等。我想我想要使用facet。我还想我想让我的数据重组,所以它有3列:一年一年,一年为#34;类别" (即咖啡,茶,苏打水等),以及价值的最后一个。我的想法是,一旦我获得该表格中的数据,那么使用分面应该是直截了当的。

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

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))

1 个答案:

答案 0 :(得分: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
...