出于某种原因,这完全是我的意思。我试图在R中创建一个条形图,其中x值是一个变量的桶(例如1-10,11-20,21-30等),y值是该bucketed范围内另一个变量的中值。
所以,如果我的价值是:
x y
2 5
4 6
6 6
10 7
14 15
17 18
我想制作一张图表,用y绘制y的中间值,两个桶用于x值,一个来自1-10,一个来自11-20。对于该范围的x,条的高度1-10将是y的中值,在这种情况下为6。条形图11-20的高度将是该范围的y的中值,或者在这种情况下为16.5。
我不知道如何做到这一点,除了"硬编码"它通过if语句添加一个新列,该语句检查x值并在列中添加一个新的字符串,例如" 1-10",但这对我来说是一个糟糕的解决方案。
我查看了其他Stack Exchange的答案,但他们几乎总是处理计数,而不是其他值的中位数。
非常感谢任何帮助。
答案 0 :(得分:1)
这可能是一种方法。我可能会使用cut()
并创建一个新的组变量。然后,汇总数据以获得每个组的中位数。在这里,我调用了您的数据mydf
。
library(dplyr)
library(ggplot2)
group_by(mydf, group = cut(x, breaks = c(1, 10, 20), labels = c("1-10", "11-20"))) %>%
summarise(median = median(y)) -> mydf2
ggplot(data = mydf2, aes(x = group, y = median)) +
geom_bar(stat = "identity")