Я бы предложил следующее: используйте один из ваших факторов для суммирования, а другой - для огранки.Вы можете удалить от position="fill"
до geom_bar()
, чтобы использовать счетчики вместо стандартизированных значений.
my.df <- data.frame(replicate(10, sample(1:5, 100, rep=TRUE)),
F1=gl(4, 5, 100, labels=letters[1:4]),
F2=gl(2, 50, labels=c("+","-")))
my.df[,1:10] <- apply(my.df[,1:10], 2, function(x) ifelse(x>4, 1, 0))
library(reshape2)
my.df.melt <- melt(my.df)
library(plyr)
res <- ddply(my.df.melt, c("F1","F2","variable"), summarize, sum=sum(value))
library(ggplot2)
ggplot(res, aes(y=sum, x=variable, fill=F1)) +
geom_bar(stat="identity", position="fill") +
coord_flip() +
facet_grid(. ~ F2) +
ylab("Percent") + xlab("Item")
![enter image description here](https://i.stack.imgur.com/WKORl.png)
На изображении выше я показал наблюдаемые частоты '1' (значение выше 4 по шкале Лайкерта) для каждой комбинации F1 (четыре уровня) и F2 (два уровня), где имеется 10 или 15 наблюдений:
> xtabs(~ F1 + F2, data=my.df)
F2
F1 + -
a 15 10
b 15 10
c 10 15
d 10 15
Затем я вычислил сумму суммы условного элемента сddply
, † с использованием «расплавленной» версии исходного data.frame.Я полагаю, что остальные графические команды легко настраиваются в зависимости от того, какую информацию вы хотите отобразить.
† В этом упрощенном случае инструкция ddply
эквивалентнаwith(my.df.melt, aggregate(value, list(F1=F1, F2=F2, variable=variable), sum))
.