R 在ggplot2中绘制每个标高的平均值

R 在ggplot2中绘制每个标高的平均值,r,ggplot2,R,Ggplot2,我正在使用ggplot2并尝试生成一个显示以下数据的绘图 df=data.frame(score=c(4,2,3,5,7,6,5,6,4,2,3,5,4,8), age=c(18,18,23,50,19,39,19,23,22,22,40,35,22,16)) str(df) df 我不想做变量的频率图(见下面的代码),而是想为每个x值生成一个平均值图。所以我想画出每个年龄段的平均分数。在18岁时,x轴上的得分可能为3。23岁时,我们的平均得分可能为4.5,以此类推

我正在使用ggplot2并尝试生成一个显示以下数据的绘图

df=data.frame(score=c(4,2,3,5,7,6,5,6,4,2,3,5,4,8),
              age=c(18,18,23,50,19,39,19,23,22,22,40,35,22,16))
str(df)
df
我不想做变量的频率图(见下面的代码),而是想为每个x值生成一个平均值图。所以我想画出每个年龄段的平均分数。在18岁时,x轴上的得分可能为3。23岁时,我们的平均得分可能为4.5,以此类推(Edit:平均值校正)。这最好用条形图表示

ggplot(df, aes(x=factor(age), y=factor(score))) + geom_bar()
Error: stat_count() must not be used with a y aesthetic.
只是不知道如何使用ggplot2在R中执行此操作,并且似乎无法在此类绘图中找到任何内容。从统计学上讲,我不知道我想要绘制的图是否是正确的,但那是另一个商店


谢谢

如果我没听错的话,你可以试试这样:

library(plyr)
library(ggplot2)
ggplot(ddply(df, .(age), mean), aes(x=factor(age), y=factor(score))) + geom_bar()

您还可以在base R中使用
aggregate()
,而不是加载另一个包

temp = aggregate(list(score = df$score), list(age = factor(df$age)), mean)
ggplot(temp, aes(x = age, y = score)) + geom_bar()

您可以在
ggplot
中使用摘要函数。以下是实现相同结果的两种方法:

# Option 1
ggplot(df, aes(x = factor(age), y = score)) + 
  geom_bar(stat = "summary", fun = "mean")

# Option 2
ggplot(df, aes(x = factor(age), y = score)) + 
  stat_summary(fun = "mean", geom = "bar")

较旧版本的
ggplot
使用
fun.y
而不是
fun

ggplot(df, aes(x = factor(age), y = score)) + 
  stat_summary(fun.y = "mean", geom = "bar")

添加一条注释,说明OP可能不想将分数转换为因子,您将得到我的答案。@DrDom,答案显而易见,您已经发布了!(+1)@joran,是的,我在回答中考虑到了这一点。因为在这种情况下,系数的平均值将是无意义的值。:)您好,您如何将平均值添加为每个条的标签?您想要平均值吗?因为从您的数据集中,18岁时的平均值是3(不是3.5),23岁时的平均值是4.5(不是6.2)?是的,我想要平均值。在那个例子中,我只是编造了一些数字,并没有仔细考虑。@ATMathew,但既然您要努力提供一些样本数据,您还应该确保您的样本输出对于所提供的数据是准确的。否则,它会导致不必要的混乱……正如注释所示,如果您有不同的组,如性别,并且您想要一个带有组平均值的图,
aes(x=因子(年龄),y=分数,组=性别,颜色=性别))
分组
将样本分开
颜色
只需给他们不同的颜色和传说“((年龄)”是什么意思/做什么?这是一个基本的R元素还是ggplot(/tidyverse?)特定的元素?