У меня есть два фрейма данных, которые содержат результаты двух опросов:
DF1 <- data.frame(V1 = factor(c("Option1", "Option2", "Option1", "Option2")),
ID1 = factor(c("Resp1", "Resp1", "Resp3", "Resp4")))
DF2 <- data.frame(V1 = factor(c("Option1", "Option1", "Option2", "Option1", "Option2")),
ID2 = factor(c("PersonA", "PersonB", "PersonC", "PersonD", "PersonE")))
В опросах участвовали разные респонденты и разное количество респондентов, но оба содержали один и тот же вопрос; ответы на этот вопрос содержатся в переменной V1, которая присутствует в обоих фреймах данных.
Я могу легко построить график V1 отдельно для обоих фреймов данных:
plot(DF1$V1)
plot(DF2$V1)
Или с помощью ggplot:
library(ggplot2)
ggplot(DF1, aes(V1, 1))+
geom_bar(stat = "identity")+
theme(axis.text.x = element_text(angle = 90, hjust = 1),
text = element_text(size=10))
ggplot(DF2, aes(V1, 1))+
geom_bar(stat = "identity")+
theme(axis.text.x = element_text(angle = 90, hjust = 1),
text = element_text(size=10))
Но я хочу иметь график, который отображает содержимое V1 в обоих фреймах данных бок о бок (в одном графике). Как это может быть сделано?





Общая стратегия заключается в том, чтобы суммировать данные и поместить их в один и тот же data.frame, а затем использовать их отдельно по заливке, цвету и т. д.
DF1 <- DF1 %>% group_by(V1) %>% summarize(DF = "DF1", n=n())
DF2 <- DF2 %>% group_by(V1) %>% summarize(DF = "DF2", n=n())
DF <- rbind(DF1, DF2)
ggplot(DF, aes(x=V1, y=n, fill=DF)) + geom_bar(stat = "identity", position = "dodge")
Вы можете удалить NA из своих данных, например, с помощью DF <- DF %>% filter(!is.na(n))
Это работает. Спасибо. Один неожиданный побочный эффект (который выходит за рамки исходного вопроса) заключается в том, что, хотя графики в моем примере (и аналогичные графики, примененные к моим фактическим данным) скрывали NA, график, написанный с помощью вашего кода, отображает NA. Вы знаете, почему так и как убрать НП с сюжета?