通过2个参数排序数据框,然后绘图

时间:2014-04-15 14:20:46

标签: r grouping rbind

我有一个数据框架,其中包含12个南美国家超过40年的GDP值。框架的片段如下:

168     Chile  1244.1799 1972
169     Chile  4076.3207 1994
170     Chile  3474.7172 1992
171     Chile  2928.1562 1991
172     Chile  6143.7276 2004
173  Colombia   882.5687 1976
174  Colombia  1094.8795 1977
175  Colombia  5403.4557 2008
176  Colombia  2376.8022 2002
177  Colombia  2047.9784 1993

1)我想按国家/地区订购数据框。前40个值应该属于阿根廷,然后是40到玻利维亚等等。

2)在每个国家/地区分组中,我想按年份订购。前三行应与阿根廷2012,阿根廷2011,阿根廷2010等有关。

我可以使用subset()单独获取每个国家/地区的数据,然后使用order()进行排序。当然,我不是必须为每个国家/地区执行此操作然后使用rbind()?如何在一次犯规中做到这一点?

3)一旦我有了最终产品,我想创建12个垂直堆叠的小型单独线图,每个线图与不同的国家相关,这表明该国家的GDP超过了〜40年。我是如何制作这样的情节的?

我确定自己能够找到关于第三个问题的信息,但是,我甚至不知道首先调用这样的图表是什么..

1 个答案:

答案 0 :(得分:1)

以下是ggplot2的解决方案。假设您的数据位于df

library(ggplot2)
df$year.as.date <- as.Date(paste0(df$year, "-01-01")) # convert year to date
ggplot(df, aes(x=year.as.date, y=gdp)) + 
  geom_line() + facet_grid(country ~ .)

enter image description here

您实际上不需要按年份和国家/地区排序,ggplot会为您处理。这是数据(显然,仅使用5个国家和12年,但这将适用于您的数据)。另外,我将向您展示如何在第三行按两列排序:

countries <- c("ARG", "BRA", "CHI", "PER", "URU")
df <- data.frame(country=rep(countries, 12), year=rep(2001:2012, each=5), gdp=runif(60))
df <- df[order(df$country, df$year),]   # <- we sort here
df$gdp <- df$gdp + 1:12 / 2