Я считаю, что лучший способ - это ggplot
. Он становится стандартным сгруппированным гистограммой.
library(ggplot2)
ggplot(avgweightpercat, aes(htcat, weight, fill = bodycat)) +
geom_col(position = "dodge")
![enter image description here](https://i.stack.imgur.com/M3o2H.png)
Агрегирование данных из текстового файла.
Агрегированные данные могут быть созданы из опубликованного файла со следующим более простым кодом.
Для создания уровней двух факторов используются cut
с соответствующими метками и конечными точками интервалов.
bodydata$bodycat <- cut(bodydata$bodyfat,
breaks = c(0, 14, 25, Inf),
labels = c("Athlete", "Average", "Obese"),
include.lowest = TRUE, right = FALSE)
bodydata$htcat <- cut(bodydata$height,
breaks = c(29.50, 68.25, 70.00, 72.25, 77.75),
labels = c("short", "below average", "above average", "tall"),
include.lowest = TRUE, right = FALSE)
avgweightpercat <- aggregate(weight ~ bodycat + htcat,
data = bodydata, FUN = mean)
Данные в формате dput
.
avgweightpercat <-
structure(list(bodycat = structure(c(1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L, 1L, 2L, 3L), .Label = c("Athlete", "Average", "Obese"
), class = "factor"), htcat = structure(c(1L, 1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("short", "below average",
"above average", "tall"), class = "factor"), weight = c(138.886363636364,
161.654761904762, 178.683333333333, 154.333333333333, 170.172413793103,
205.243333333333, 160.979166666667, 180.99358974359, 202.823529411765,
175.075, 199.863636363636, 228.679166666667)), row.names = c(NA,
-12L), class = "data.frame")