Огранка набора данных - PullRequest
0 голосов
/ 29 апреля 2020

Это вопрос новичка. Я потратил большую часть дня, пытаясь понять, как обрабатывать мои данные, но все примеры столкновения, с которыми я столкнулся, кажутся неподходящими для моего набора данных.

Вот первые пять строк из моих данных:

      Date Germany.Yield Italy.Yield Greece.Yield Italy_v_Germany.Spread Greece_v_Germany.Spread
2020-04-19        -0.472       1.820        2.287                  2.292                   2.759
2020-04-12        -0.472       1.790        2.112                  2.262                   2.584
2020-04-05        -0.345       1.599        1.829                  1.944                   2.174
2020-03-29        -0.441       1.542        1.972                  1.983                   2.413
2020-03-22        -0.475       1.334        1.585                  1.809                   2.060

Я просто хочу создать две линейные диаграммы. На обоих графиках ось X будет датой. На первом графике ось Y должна быть Italy_v_Germany.Spread, а на втором - ось Y Greece_v_Germany.Spread.

Первый график выглядит следующим образом:

enter image description here Итак, я хочу, чтобы две диаграммы появлялись рядом друг с другом, например:

enter image description here Одна слева должна быть Italy_v_Germany.Spread, а один справа должен быть Greece_v_Germany.Spread.

Я действительно понятия не имею, с чего начать. Надеюсь, что кто-то может указать мне в правильном направлении.

В целях воспроизводимости примера я поделюсь ссылкой на файлы CSV, которые я использую: https://1drv.ms/u/s! AvGKDeEV3LOsmmlHkzO6YVQTRiOX? E = mukBVy . К сожалению, эти файлы конвертируются в формат Excel, когда они передаются по этой ссылке, поэтому вам, возможно, придется экспортировать файлы в файлы CSV, чтобы код работал.

Вот код, который у меня есть:

library(ggplot2)
library(scales)
library(extrafont)
library(dplyr)
library(tidyr)

work_dir <- "D:\\OneDrive\\Documents\\Economic Data\\Historical Yields\\Eurozone"
setwd(work_dir)

# Germany
#---------------------------------------
germany_yields <- read.csv(file = "Germany 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)
germany_yields <- germany_yields[, -(3:6)]
colnames(germany_yields)[1] <- "Date"
colnames(germany_yields)[2] <- "Germany.Yield"
#---------------------------------------

# Italy
#---------------------------------------
italy_yields <- read.csv(file = "Italy 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)

italy_yields <- italy_yields[, -(3:6)]
colnames(italy_yields)[1] <- "Date"
colnames(italy_yields)[2] <- "Italy.Yield"
#---------------------------------------

# Greece
#---------------------------------------
greece_yields <- read.csv(file = "Greece 10-Year Yield Weekly (2007-2020).csv", stringsAsFactors = F)

greece_yields <- greece_yields[, -(3:6)]
colnames(greece_yields)[1] <- "Date"
colnames(greece_yields)[2] <- "Greece.Yield"
#---------------------------------------

# Join data
#---------------------------------------
combined <- merge(merge(germany_yields, italy_yields, by = "Date", sort = F), 
              greece_yields, by = "Date", sort = F)

combined <- na.omit(combined)
combined$Date <- as.Date(combined$Date,format = "%B %d, %Y")
combined["Italy_v_Germany.Spread"] <- combined$Italy.Yield - combined$Germany.Yield
combined["Greece_v_Germany.Spread"] <- combined$Greece.Yield - combined$Germany.Yield
#--------------------------------------------------------------------

fl_dates <- c(tail(combined$Date, n=1), head(combined$Date, n=1))

ggplot(data=combined, aes(x = Date, y = Italy_v_Germany.Spread)) + geom_line() +

       scale_x_date(limits = fl_dates,
                    breaks = seq(as.Date("2008-01-01"), as.Date("2020-01-01"), by="2 years"),
                    expand = c(0, 0),
                    date_labels = "%Y") 

1 Ответ

4 голосов
/ 29 апреля 2020

Вам необходимо получить данные в длинном формате, например, с помощью pivot_wider. Тогда это должно работать.

library(dplyr)
library(tidyr)
library(ggplot2)


data <- tribble(~Date,  ~Germany.Yield, ~Italy.Yield, ~Greece.Yield, ~Italy_v_Germany.Spread, ~Greece_v_Germany.Spread,
"2020-04-19",        -0.472,       1.820,        2.287,                  2.292,                   2.759,
"2020-04-19",       -0.472,       1.820,        2.287,                  2.292,                   2.759,
"2020-04-12",      -0.472,       1.790,        2.112,                  2.262,                   2.584,
"2020-04-05",     -0.345,       1.599,        1.829,                  1.944,                   2.174,
"2020-03-29",    -0.441,       1.542,        1.972,                  1.983,                   2.413,
"2020-03-22",   -0.475,       1.334,        1.585,                  1.809,                   2.060
)


data %>% 
  mutate(Date = as.Date(Date)) %>% 
  pivot_longer(
    cols = ends_with("Spread"),
    names_to = "country",
    values_to = "Spread_v_Germany",
    values_drop_na = TRUE
  ) %>% 

  ggplot(., aes(x = Date, y = Spread_v_Germany, group = 1)) +
    geom_line() +
   facet_wrap(. ~ country)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...