Сначала вы можете использовать cut
для классификации данных о доходах.
dat$IncHouseh.c=cut(dat$IncHouseh, seq(1e3, 5e3, 1e3),
labels=c("10k-20k", "20k-30k", "30k-40k", "40k-50k"))
Затем, во-вторых, для агрегирования процента от количества автомобилей, которые вы можете использовать prop.table(table(x)))
в tapply
.
agg <- do.call(rbind, with(t(dat), tapply(HousehNumcars, IncHouseh.c, FUN=function(x)
prop.table(table(x)))))
В-третьих, сюжет!
op <- par(mar=c(5, 5, 4, 6), xpd=TRUE) ## expand outer margins
b <- barplot(agg, xaxt="n", col=2:5, ## assign position output to `b`
xlab="Income", ylab="Probability", main="Cars in households")
mtext(rownames(agg), 1, 1, at=b) ## use `b` for label positioning
legend(5, 1, title="cars", col=5:2, pch=15, legend=3:0) ## legend
par(op)
Обратите внимание, что dat
необходимо переставить t
.
Результат
Данные:
set.seed(42)
dat <- data.frame(IncHouseh=sample(1e3:5e3, 2e3, replace=T),
HousehNumcars=sample(0:3, 2e3, replace=TRUE))