У меня проблемы с функцией unique () при подключении к dplyr. С моим простым примером кода это работает нормально:
category <- as.factor(c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4))
quality <- as.factor(c(0, 1, 2, 3, 3, 0, 0, 1, 3, 2, 2, 2, 1, 0, 3, 2, 3, 3, 1, 0, 2, 1))
mydata <- data.frame(category, quality)
Это настраивает мой фрейм данных, чтобы с ним было легче работать и создавать красивый график:
mydata2 <- mydata %>%
group_by(category, quality) %>%
mutate(count_q = n()) %>%
ungroup() %>%
group_by(category) %>%
mutate(tot_q = n(),pc = count_q*100 / tot_q) %>%
unique() %>%
arrange(category)
myplot <- ggplot(mydata2, aes(x = category, y = pc, fill = quality)) +
geom_col() +
geom_text(aes(
x = category,
y = pc,
label = round(pc,digits = 1),
group = quality),
position = position_stack(vjust = .5)) +
ggtitle("test") +
xlab("cat") +
ylab("%") +
labs("quality")
myplot
Выглядит именно так, как я хочу :
Однако с моими фактическими данными тот же код создает такой беспорядок:
Я нашел решение: когда я добавляю эту строку и использую новую mydata.unique
в качестве основы для моего ggplot, она работает точно так же, как с данными из моего примера. По какой-то причине это не требуется в данных примера, тогда как в моих фактических данных unique()
внутри трубопровода, похоже, ничего не делает.
mydata.unique <- unique(mydata2[c("quality","category", "count_q", "tot_q", "pc")])
Я не понимаю, почему мне нужно добавить над линией. Очевидно, я не могу поделиться своими фактическими данными. Может кто все-таки понимает, о чем идет речь. Возможно, это связано с другими (нерелевантными) столбцами в данных, которые не могут быть обработаны unique()
?