Построение столбчатой ​​и сгруппированной гистограммы в r

В настоящее время я пытаюсь построить некоторые данные в R, и мне это не удается. Мои данные выглядят так:

Мои данные хранятся во фрейме данных под названием «Голова»: Моя ответная переменная - это фактор (называемый «цвет») только с двумя уровнями («черный» и «белый»). Моя первая (и основная) объясняющая переменная - это фактор ( называется «Год» с двумя уровнями («Год 1996» и «Год 2019»). Моя вторичная объясняющая переменная - это фактор (называемый «DateClass») с тремя уровнями («A», «B» и «C»). набор данных выглядит примерно так:

Цвет Год Дата Класс

Черный 1996 A

Черный 2019 B

Белый 1996 A

Черный 1996 C

Белый 2019 B

Белый 1996 B

...так далее

Я хочу построить «цвет головы» как пропорцию белого / черного по сравнению с «Годом» и «DateClass». Я подумал о сгруппированной гистограмме и наложении черного и белого, но я не знаю, как это сделать. Какие-либо предложения? Вы бы изобразили стопки «цветных» в процентах или в виде общего количества?

Спасибо за ответы, с наилучшими пожеланиями


person Nico Ordax Sommer    schedule 16.03.2020    source источник
comment
вы что-нибудь пробовали? r-graph-gallery.com/stacked-barplot.html   -  person rawr    schedule 16.03.2020
comment
Отвечает ли это на ваш вопрос? Сгруппированный и сложенный штриховой график с использованием базового R   -  person jay.sf    schedule 16.03.2020
comment
Вы можете сначала начать с table ()?   -  person oaxacamatt    schedule 16.03.2020


Ответы (1)


Это то, что вы ищите?

ДАННЫЕ:

df <- data.frame(Colour = c("Black", "Black", "White", "Black", "White", "White"),
                 Year = c(1996, 2019, 1996, 1996,2019, 1996),
                 DateClass = c("A", "B", "A", "C", "B", "B"))

ОТРЕДАКТИРОВАННОЕ РЕШЕНИЕ:

Во-первых, агрегируйте данные, чтобы получить пропорции Colour на DateClass в подмножествах df на Year==2019 и, соответственно, Year==2019; сохранить результаты в df1996 и df2019:

df1996 <- aggregate(
  x = df$DateClass[df$Year==1996],
  by = list(df$Colour[df$Year==1996]),
  function(x) prop.table(table(x)))

df2019 <- aggregate(
  x = df$DateClass[df$Year==2019],
  by = list(df$Colour[df$Year==2019]),
  function(x) prop.table(table(x)))

Теперь постройте два фрейма данных бок о бок, используя макет из двух панелей:

par(mfrow = c(1,2))
barplot(df1996[,-1], cex.names = 0.8, col = c("blue","red"),
        main = "Black/White by DateClass in 1996", cex.main = 0.8,
        xlab = "1996", ylab = "Proportions")

barplot(df2019[,-1], cex.names = 0.8, col = c("blue","red"),
        main = "Black/White by DateClass in 2019", cex.main = 0.8,
        xlab = "2019", ylab = "Proportions")

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

person Chris Ruehlemann    schedule 16.03.2020
comment
Привет, большое спасибо за вклад. К сожалению, это не совсем то, что я искал. Я пытался добиться соотношения черного и белого в трех классах свиданий в оба года. Хотя большое спасибо :) - person Nico Ordax Sommer; 17.03.2020
comment
Привет, я отредактировал решение. Дайте мне знать, если это то, что вы имели в виду. - person Chris Ruehlemann; 17.03.2020
comment
О, да! Это то, что я искал! Большое спасибо за помощь! - person Nico Ordax Sommer; 17.03.2020
comment
Рад слышать! НЕ стесняйтесь принять ответ, щелкнув зеленую галочку в левом верхнем углу. Спасибо. - person Chris Ruehlemann; 17.03.2020