Заказ кадра данных по 2 параметрам, затем построение графика

У меня есть набор данных со значениями ВВП для 12 стран Южной Америки за ~ 40 лет. Фрагмент кадра выглядит следующим образом:

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) В каждой группе стран я хочу упорядочить по годам. Первые 3 строки должны относиться к Аргентине 2012 г., Аргентине 2011 г., Аргентине 2010 г. и т. Д.

Я могу получить данные по каждой стране индивидуально с помощью subset(), а затем заказать с помощью order(). Конечно, мне не нужно делать это для каждой страны, а затем использовать rbind()? Как мне сделать это одним махом?

3) После того, как у меня будет конечный продукт, я хотел бы создать 12 небольших отдельных линейных графиков, сложенных вертикально, каждый из которых относится к другой стране, что показывает тенденцию ВВП этой страны за ~ 40 лет. Как мне создать такой сюжет?

Я уверен, что смог бы сам найти информацию по 3-му вопросу, но, ну, я даже не знаю, как вообще называется такой граф ..


person cavaunpeu    schedule 15.04.2014    source источник
comment
возможный дубликат Как отсортировать фрейм данных по столбцам в R   -  person Roope    schedule 15.04.2014


Ответы (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 ~ .)

введите описание изображения здесь

На самом деле вам не нужно сортировать по годам и странам, 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
person BrodieG    schedule 15.04.2014
comment
Потрясающие! Большое спасибо, Броди. Сам пока не могу проголосовать за ваш ответ, так как репутация недостаточно высока. - person cavaunpeu; 15.04.2014
comment
@cavaunpeu, если это отвечает на ваш вопрос, пометьте его как ответ. Хотя вы не можете проголосовать за, у вас должна быть возможность проверить это. - person BrodieG; 16.04.2014
comment
Выполнено. Прости за это. Спасибо, что дал мне знать. - person cavaunpeu; 16.04.2014