【问题标题】:Ggplot2: unique() does not work properly with dplyr pipingGgplot2:unique() 不能与 dplyr 管道一起正常工作
【发布时间】: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() 无法处理的数据中的其他(不相关)列有关?

【问题讨论】:

    标签: r ggplot2 dplyr


    【解决方案1】:

    尝试使用distinct() 而不是unique()。而在这种情况下,可能你需要总结而不是mutate() + distinct()

    【讨论】:

      【解决方案2】:

      如果你原来的 df 有更多变量,试试这个:

      mydata2 <- mydata %>% 
        group_by(category, quality) %>% 
        mutate(count_q = n()) %>% 
        ungroup() %>%
        group_by(category) %>% 
        mutate(tot_q = n(),pc = count_q*100 / tot_q) %>% 
        distinct(category, quality, count_q, tot_q, pc, .keep_all = TRUE) %>% 
        arrange(category)
      

      或者正如@adalvarez 提到的,将mutate 替换为summarise

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        • 2014-07-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多