Это то, что вы хотите?Если вывод соответствует желаемому, перейдите к просмотру, как производится вывод.
Выход
Данные
#dput(bar_df)
structure(list(Fleet = structure(c(1L, 1L, 2L), .Label = c("CL605",
"GLOBAL"), class = "factor"), F1 = structure(c(1L, 3L, 2L), .Label = c("ATC Clearance Unsafe",
"ATC Clerance Unsafe", "Time Pressure"), class = "factor"), F2 = structure(c(1L,
3L, 2L), .Label = c("", "Callsign Confusion", "Lack of Communication"
), class = "factor"), F3 = structure(c(1L, 3L, 2L), .Label = c("",
"Illusion", "Training"), class = "factor")), class = "data.frame", row.names = c(NA,
-3L))
barplot(table(unlist(bar_df)), las = 2, ylab = "Count")
Примечание Естьдве пустые строки в ваших данных, и поэтому у вас есть 2
наблюдений без метки x.Вы можете маркировать или иметь дело с ними согласно вашему требованию.
Если это то, что вы хотите, я обновлю ggplot2
эквивалентность, которая более универсальна для меня .
Обновление
В этом случае, есть один способ сделать это.
library(reshape2)
library(dplyr)
library(ggplot2)
# the data
bar_df <- data.frame(Fleet = c("CL605", "CL605", "GLOBAL"),
F1= c("ATC Clearance Unsafe","Time Pressure", "ATC Clerance Unsafe"),
F2 = c("", "Lack of Communication", "Callsign Confusion"),
F3 = c("", "Training", "Illusion"))
# -------------------------------------------------------------------------
#melt your data to long format
bar_long <- melt(bar_df, id.vars ="Fleet")
# since F1---F3 isn't important, get uniqu observations for Fleet and value
bar_long_uniq <- unique(bar_long[ c("Fleet", "value")])
# generate a frequency table
bar_freq <- as.data.frame(unlist(table(bar_long$value)))
# join them
data_final <- bar_long_uniq %>%
left_join(bar_freq, by = c("value" = "Var1"))
# there is warning (due to different factor levels)
# -------------------------------------------------------------------------
#Plot it
base <- ggplot(data_final, aes(x=value, y = Freq, fill = Fleet)) +
geom_bar(stat="identity")
base + theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 12))
Выход-1.1