【问题标题】:R dplyr function putting mutate, top_frac and ifelse togetherR dplyr 函数将 mutate、top_frac 和 ifelse 放在一起
【发布时间】:2020-02-19 23:56:34
【问题描述】:

我正在寻找改变新列以使用 dplyr 分配顶部和底部 20% 的值的方法。

这是我的代码,但对我来说效果不佳。

DF1 <- DF %>%
  group_by(Timepoint) %>%
  filter (!is.na (log2_Concentration)) %>%
  arrange (desc(log2_Concentration)) %>%
  mutate (top_bottom=ifelse (log2_Concentration=top_frac(.2), "TOP20PERC",
          ifelse (log2_Concentration=top_frac(-.2), "BOTTOM20PERC", "MID")))

ggplot(DF1, aes(x = Timepoint, y=log2_Concentration,fill=Timepoint)) + 
  geom_boxplot() +
  geom_jitter(size=1,position=position_jitter(0.2), aes(col=DF1$top_bottom)) +
  scale_colour_manual(values = c("red", "gray", "blue"), 
                      labels = c("TOP20PERC", "MID", "BOTTOM20PERC"))

我希望为每个时间点分配前 20%、后 20% 和其余的作为 MID,以便我可以在我的 ggplot 中为这些点着色。

[

非常感谢大师!

【问题讨论】:

  • 您似乎已将问题主题从数据处理更改为绘图。尚不清楚您是否从数据中获得了上面的图并且不喜欢它的某些方面(或者?)您正在尝试模仿它。无论哪种情况,这都是一个新问题,您应该接受下面对您之前的问题的回答并发布一个新问题,但这次您应该提供minimal reproducible example

标签: r if-statement dplyr


【解决方案1】:

也许,您可以使用quantile 获得顶部和底部 20%。

library(dplyr)

DF %>%
  filter(!is.na(log2_Concentration)) %>%
  group_by(Timepoint) %>%
  mutate(top_bottom= case_when(
           log2_Concentration > quantile(log2_Concentration, 0.8) ~"TOP20PERC", 
           log2_Concentration < quantile(log2_Concentration, 0.2) ~"BOTTOM20PERC", 
           TRUE ~ "MID"))

【讨论】:

  • 嗨,有什么建议可以在每个时间点取笑他们吗?当我执行此操作时,似乎并非如此。我希望例如在时间点 1,会有一个 TOP20PERC、BOTTOM20PERC、MID,然后在时间点 2 类似(分别与 TOP20PERC、Bottom 和 mid 分组)。
  • @user2533451 我认为这也是一样的。尝试使用dplyr:: mutate 而不仅仅是mutate。如果它仍然不起作用,您可以提供一个可重现的示例来调试它吗?
  • 嗨 Ronak,我已经添加了编辑和我的 ggplot。谢谢
  • 看图并不清楚为什么当我们实际按Timepoint 对它进行分组时,每个Timepoint 的答案都不起作用。我们需要一个可重现的例子来验证这一点。 See here on how to give a reproducible example。将dput(DF) 添加到您的帖子中。
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2020-03-31
  • 1970-01-01
  • 2016-06-28
相关资源
最近更新 更多