Способ равномерной перестановки столбцов между несколькими таблицами и диаграммой?

#r #plot #dplyr #datatables

#r #сюжет #dplyr #таблицы данных

Вопрос:

У меня есть 3 DF, описывающих частоты определенных тегов по годам. Каждый DF имеет одинаковые заголовки столбцов, за исключением одного, в котором отсутствует столбец 1 , потому что в нем нулевые частоты, и 1 строка, потому что в этом году нет частоты.

 df1 lt;- data.frame(Year = c("2000", "2001", "2002", "2003", "2004"),  Country = c(1, 4, 5, 2, 26),   Flag = c(23, 2, 4, 2, 5),  Anthem = c(3, 7, 8, 2, 3)  )  df2 lt;- data.frame(Year = c("2000", "2001", "2002", "2003", "2004"),  Country = c(1, 4, 5, 2, 26),   Anthem = c(23, 2, 4, 2, 5),  Flag = c(3, 7, 8, 2, 3)  )  df3missing lt;- data.frame(Year = c("2001", "2002", "2003", "2004"),  Anthem = c(4, 5, 2, 26),   Country = c(2, 4, 2, 5)  )  

Если бы я нарисовал их сейчас, цвета не представляли бы один и тот же заголовок столбца для каждой таблицы, потому что порядок в таблицах разный. И в одной таблице разное количество столбцов и строк.

 df11 lt;- melt(df1, id.vars="Year") df22 lt;- melt(df2, id.vars="Year") df3missing2 lt;- melt(df3missing, id.vars="Year")   ggplot(df11, aes(x = Year, y = value, fill = variable))   geom_bar(position = "fill", stat = "identity")  ggplot(df22, aes(x = Year, y = value, fill = variable))   geom_bar(position = "fill", stat = "identity")  ggplot(df3missing2, aes(x = Year, y = value, fill = variable))   geom_bar(position = "fill", stat = "identity")  

Есть ли способ реорганизовать таблицы так, чтобы все столбцы располагались в одном порядке, чтобы один и тот же цвет на 3 участках соответствовал одному и тому же столбцу для всех таблиц? В моих данных более 10 столбцов.

ТИА

Ответ №1:

Возможно, это приблизит вас к желаемому результату.

Сначала добавьте NA недостающий кадр, затем получите порядок столбцов для использования melt . Это позволяет получить несколько симметричный результат.

Наконец, вручную выберите свою собственную цветовую схему, чтобы получить одинаковые цвета для одних и тех же переменных.

 library(reshape2) library(ggplot2)  df3 lt;- df3missing  df3$Flag lt;- NA cc lt;- colnames(df1)  dff1 lt;- melt(df1[,cc]) dff2 lt;- melt(df2[,cc]) dff3 lt;- melt(df3[,cc], id.vars="Year")  ggplot(dff1)     geom_bar( aes( Year, value, fill=variable ), stat = "identity" )     scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue")) ggplot(dff2)     geom_bar( aes( Year, value, fill=variable ), stat = "identity" )     scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue")) ggplot(dff3)     geom_bar( aes( Year, value, fill=variable ), stat = "identity" )     scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue"))  

ggplot2 3 участка

Комментарии:

1. Спасибо за предложение. Это сработало!