假设我有一个如下所示的数据框:
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
我想要做的是将x值切换成二进制位,例如:
data$bins <- cut(data$x,breaks = 4)
然后,我想以x轴为分档的方式绘制(使用ggplot)结果,y轴是落入相应分档的数据$ y数据点的平均值。
提前谢谢
答案 0 :(得分:4)
您可以使用stat_summary()
功能。
library(ggplot2)
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
data$bins <- cut(data$x,breaks = 4)
# Points:
ggplot(data, aes(x = bins, y = y)) +
stat_summary(fun.y = "mean", geom = "point")
# Histogram bars:
ggplot(data, aes(x = bins, y = y)) +
stat_summary(fun.y = "mean", geom = "histogram")
以下是各点的图片:
答案 1 :(得分:1)
由于y值的平均值可能小于0,我建议使用点图而不是条形图。圆点代表手段。您可以使用qplot或常规ggplot函数。后者更容易定制。在这个例子中,两者都产生相同的输出。
library(ggplot2)
set.seed(7)
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
data$bins <- cut(data$x,breaks = 4, dig.lab = 2)
qplot(bins, y, data = data, stat="summary", fun.y = "mean")
ggplot(data, aes(x = factor(bins), y = y)) +
stat_summary(fun.y = mean, geom = "point")
您还可以添加错误栏。在这种情况下,它们显示组标准偏差的平均值+/- 1.96倍。可以使用tapply获得组均值和SD。
m <- tapply(data$y, data$bins, mean)
sd <- tapply(data$y, data$bins, sd)
df <- data.frame(mean.y = m, sd = sd, bin = names(m))
ggplot(df, aes(x = bin, y = mean.y,
ymin = mean.y - 1.96*sd,
ymax = mean.y + 1.96*sd)) +
geom_errorbar() + geom_point(size = 3)
答案 2 :(得分:0)