Я понимаю, что вы очень плохо знакомы с R - возможно, я могу помочь вам с несколькими идеями.
Таблица, которую вы создали с помощью kable
, может предоставить вам то, что вам нужно в том, как выглядит таблица. Однако при построении графиков вам будет гораздо проще и гибче иметь формат вместо широкого .
Вот пример того, как вы можете подойти к этому. Для этого требуются следующие библиотеки:
library(knitr)
library(kableExtra)
library(tidyverse)
library(ggplot2)
Это простой фрейм данных, созданный для примера. Обратите внимание, что вам может потребоваться выполнить дальнейшие манипуляции в зависимости от структуры вашего фрейма данных, созданного из файла CSV. Если вы используете dput
, как предложено @akrun, это поможет вам в дальнейшем.
df <- data.frame(
Country = c("Albania", "Austria", "Belgium", "Bulgaria"),
Emit_1971 = c(3.9, 48.7, 116.8, 62.8),
Emit_1972 = c(4.5, 50.5, 126.7, 64.8),
Emit_1973 = c(3.9, 54, 132.7, 66.6),
Emit_1974 = c(4.2, 51.3, 130.6, 67.7)
)
До сих пор это можно использовать для предоставления таблицы данных с kable
, как у вас сейчас. Обратите внимание, что вы можете определить метки столбцов с помощью col.names
(уменьшенное количество заголовков, поскольку в add_header_above
не было предоставлено столько лет данных).
knitr::kable(df, col.names = c("Country", seq(1971, 1974, 1))) %>%
kable_styling(bootstrap_options = c("striped", "condensed", "interactive", "bordered", "responsive"),
full_width = TRUE, font_size = 12, fixed_thead = TRUE) %>%
add_header_above(c("", "CO2 Emissions per country" = 4),
font_size = 14) %>%
column_spec(1, bold = TRUE) %>%
row_spec(row = 0, font_size = 14, bold = TRUE) %>%
scroll_box(width = "100%", height = "800px")
![table of CO2 emissions by country](https://i.stack.imgur.com/5gKOy.png)
В соответствии с предложением @Gregor, вы можете преобразовать свои данные из широких в заданные заданные периоды. Я предпочитаю использовать tidyr
в tidyverse
для этого. При этом предполагается, что имена столбцов имеют подчеркивание и год (также доступны другие параметры).
long.df <- pivot_longer(df, cols = -Country, names_to = c(".value", "Year"), names_sep = "_", names_ptypes = list(Year = numeric()))
# A tibble: 16 x 3
Country Year Emit
<fct> <dbl> <dbl>
1 Albania 1971 3.9
2 Albania 1972 4.5
3 Albania 1973 3.9
4 Albania 1974 4.2
5 Austria 1971 48.7
6 Austria 1972 50.5
7 Austria 1973 54
8 Austria 1974 51.3
9 Belgium 1971 117.
10 Belgium 1972 127.
11 Belgium 1973 133.
12 Belgium 1974 131.
13 Bulgaria 1971 62.8
14 Bulgaria 1972 64.8
15 Bulgaria 1973 66.6
16 Bulgaria 1974 67.7
Исходя из этого, у вас есть варианты дальнейших манипуляций в зависимости от потребностей построения. Например, чтобы составить график выбросов стран по годам, вы можете сделать следующее:
ggplot(long.df, aes(x = Year, y = Emit, col = Country)) +
geom_line() +
scale_x_continuous(breaks = seq(1971, 1974, 1)) +
labs(title = "CO2 Emissions per country", x = "Year", y = "Emissions")
![plot countries emissions by year](https://i.stack.imgur.com/vAUtQ.png)
Если вы хотите сгруппировать страны по годам (сумма все страны в каждом году), вы можете сделать следующее:
long.df.years <- long.df %>%
group_by(Year) %>%
summarise(Total = sum(Emit))
ggplot(long.df.years, aes(x = Year, y = Total)) +
geom_line() +
scale_x_continuous(breaks = seq(1971, 1974, 1)) +
labs(title = "CO2 Emissions", x = "Year", y = "Emissions")
![sum emissions per year plot](https://i.stack.imgur.com/a7C3k.png)
Если вы хотите суммировать выбросы за все годы для В каждой стране вы можете сделать следующее:
long.df.europe <- long.df %>%
group_by(Country) %>%
summarise(Total = sum(Emit))
# A tibble: 4 x 2
Country Total
<fct> <dbl>
1 Albania 16.5
2 Austria 204.
3 Belgium 507.
4 Bulgaria 262.
Опять же, надеюсь, что это полезно. Пожалуйста, дайте мне знать, если это то, что вы имели в виду или что может потребовать дальнейших разъяснений.