【问题标题】:Bar-chart with dplyr/ggplot with male/female bars side by side带有 dplyr/ggplot 的条形图,带有并排的男性/女性条
【发布时间】:2020-01-03 16:22:48
【问题描述】:

我正在尝试

这是一个例子:

df <- read.table(text = 
  "sex  var value
  m a   1
  m a   1
  m a   0
  m b   0
  m b   0
  f a   1
  f a   0
  f b   0
  f b   1", 
header = TRUE, 
stringsAsFactors = FALSE
  )

我想创建一个条形图,其中包含每个人的比例 var 值,用于每个 sex

所以在上面的数据中我会有:

var a : 
        m : 0.6
        f : 0.5
var b : 
        m : 0
        f : 0.5

但使用 ggplot 表示为条形图

【问题讨论】:

  • 你试过什么代码?错误是什么?

标签: r ggplot2 dplyr


【解决方案1】:

使用tidyverse

df %>% 
group_by(var, sex) %>% 
summarise(vals = mean(value)) %>%
ungroup() %>% 
ggplot(aes(x = var, y = vals, col = sex, fill = sex, group = sex)) + 
geom_bar(stat = "identity")

您还可以反转varsex

【讨论】:

  • 谢谢 - 我最初使用 mutate( freq = round(100*sum(value)/n()) 而不是 summarise( ),与您使用的相同分组 (group_by(var, sex)),这不起作用。我不太确定我是否理解为什么,但也许这是另一篇文章的内容。
  • 作为附加说明 - 无论是否使用 ungroup( ),您编写的代码似乎都有效,这是一种约定还是有理由在这里取消组合?
  • value 的数据是 01。如果你想找到percent * 100`,你可以做vals = round(mean(value) * 100)。突变仅在您想添加新列时才有效,但根据您的问题,您似乎想绘制结果,而不一定要添加新列
  • ungroup 作为标准做法,因为分组可以在整个过程中继续进行。我知道您提供了示例数据,但如果您想在没有分组的情况下做任何额外的工作,那么明智的做法是ungroup(),尤其是在提供建议时。
猜你喜欢
  • 2020-03-29
  • 2014-05-02
  • 1970-01-01
  • 2017-06-20
  • 2020-10-06
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多