【发布时间】:2020-05-26 11:46:46
【问题描述】:
在使用 dplyr 进行管道传输时,我遇到了 unique() 函数的一些问题。使用我的简单示例代码可以正常工作:
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() 无法处理的数据中的其他(不相关)列有关?
【问题讨论】: