У меня действительно есть два вопроса.Я совершенно уверен, что второй поможет мне решить первый, но я могу быть на неправильном пути, и могут быть более простые решения.
Первый вопрос: я хотел бы составить гистограмму с накоплениемиспользуя ggplot2 и geom_bar.У меня есть данные временных рядов по многим странам с 4 дискретными интервалами (годами).Я знаю, что нетипично показывать данные временных рядов в виде гистограмм (и я открыт для альтернативных предложений).То, что я пытаюсь сделать, это показать гистограммы в виде фазовых диаграмм (по годам), где страны показаны в одинаковом порядке убывания на основе суммы всех моих 4 переменных за все 4 года.Я хотел бы показать только первые 25 стран.
Чтобы сделать все это, я использовал комбинацию труб dplyr и ggplot.
Сначала я вычислил новый столбец с помощью
data %>%
rowwise() %>%
mutate(total = sum(var1, var2, var3, var4, na.rm = T) %>%
arrange(desc(total)) %>%
top_n(100, total) %>%
ggplot...
, но это покажет мне только итоги по каждой паре страна-год и имеет некоторые побочные эффекты, такие как оставление нескольких лет пустыми для некоторых стран, потому что их значения за эти годы не составили топ-100.
Затем я попытался использовать функцию суммирования для суммирования 4-х переменных за все 4 года следующим образом:
data %>%
summarize(sum = sum(var1, var2, var3, var4, na.rm = T))
, но это уменьшает мою таблицу до двух столбцов, которые, как я знаю,желаемый результат, но я не знаю, как получить эту новую сумму, назначенную каждой соответствующей стране на все годы.
Я постараюсь воспроизвести оба эти вопроса здесь:
Некоторые данные:
countries <- c("country A", "country B", "country C", "country D", "country E")
years <- rep(c(2014, 2015, 2016, 2017), 5)
set.seed(123)
var1 <- sample(1:1000, 20)
var2 <- sample(1:1000, 20)
var3 <- sample(1:1000, 20)
var4 <- sample(1:1000, 20)
data <- data.frame(countries, years, var1, var2, var3, var4)
data %>%
rowwise() %>%
mutate(total = sum(var1, var2, var3, var4, na.rm = T)) %>%
gather(key, value, 3:6) %>%
top_n(32, total) %>%
ggplot(., aes(x = countries, y = value, fill = key)) +
geom_col() +
facet_grid(cols = vars(years)) +
coord_flip()
Как вы можете видеть, и, как и ожидалось по коду, R вычислил сумму каждой пары страна-год, ачем сумма для каждой страны для ВСЕХгода.Я серьезно потерян на том, как действовать.Любая помощь приветствуется!
Если это имеет какое-либо значение: множество NA в Var3 и Var4.
Я забыл проиллюстрировать второй вопрос:
data %>%
group_by(countries) %>%
summarize(sum = sum(var1, var2, var3, var4, na.rm = T))
возвращает aтаблица со странами и суммами, но как мне переназначить этот новый столбец в мой исходный фрейм данных?