Привет, ребята,
Я совсем новичок в R и ggplot2. Я делаю анализ набора данных об американских рейсах с 1987 по 2008 год: набор данных
Это просто для ознакомления. Моя проблема в том, что я хочу показать распределение задержек по годам, но лет 22, и я не думаю, что написать в 22 раза больше строк кода:
percDepDelays<- depDelaysByYear$`count(DepDelay)` / allFlights$`count(*)`
percArrDelays <- arrDelaysByYear$`count(ArrDelay)` / allFlights$`count(*)`
percAntDepdelays <- antDepDelaysByYear$`count(DepDelay)` / allFlights$`count(*)`
percAntArrDelays <- antArrDelaysByYear$`count(ArrDelay)` / allFlights$`count(*)`
slices <- c(percDepDelays[1], percArrDelays[1], percAntDepdelays[1], percAntArrDelays[1])
pct <- round(slices/sum(slices) * 100, 2)
percentageData <- data.frame(Year = "1987",
Percentage = pct,
TypeOfDelays = factor(c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")))
labels <- c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")
p <- ggplot(data = percentageData, aes(x="", y = Percentage, fill = TypeOfDelays)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste0(Percentage,' %')), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y", start = 0) +
theme_void()
Я использую приведенный выше код, чтобы показать в виде процента на круговой диаграмме количество каждой задержки для каждого года, очевидно, для каждого года изменения данных, и это причина, почему мне нужен цикл, что я ' я пробовал это:
p <- vector()
while (i < length(percDepDelays)) {
slices <- c(percDepDelays[i], percArrDelays[i], percAntDepdelays[i], percAntArrDelays[i])
pct <- round(slices/sum(slices) * 100)
percentageData <- data.frame(Year = yearsLabels[i],
Percentage = pct,
TypeOfDelays = factor(c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")))
labels <- c("Departure delays", "Arrival Delays", "Early Departure", "Early arrival")
p[i] <- ggplot(data = percentageData, aes(x="", y = Percentage, fill = TypeOfDelays)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste0(Percentage,' %')), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y", start = 0) +
theme_void()
i = i + 1
}
На практике я помещаю все графики ggplot в массив, а затем я бы использовал ggarrange, чтобы собрать все вместе на одном экране. Проблема в том, что в векторе p хранится структура data.frame, используемая для построения графика (я хочу помнить, что данные меняются за каждый год, это причина, по которой мне нужен цикл), это действительно странно, потому что вне цикла ( первый код) все работает нормально, p является классом ggplot. Итак, как я могу решить эту проблему? Есть способ объединить большое количество сюжетов без написания тысяч и тысяч одинаковых строк кода?
Спасибо за помощь