我有一个数据文件,如下例所示,但更大一些
names num Y1 Y2
William 1 4.71 7.4
William 2 3.75 8
William 3 4.71 7.9
Katja 1 5.83 8.5
Katja 2 5.17 7.1
Katja 3 6.08 7.4
Aroma 1 4.04 7.5
Aroma 2 5 6.9
Aroma 3 4.3 7.9
...
我必须为Y1和Y2计算每个3个相同名称(第一列)的平均值。然后分别用Y1和Y2的每个名称的平均值制作一个条形图。所以在x轴上我将有名字,在y轴上有平均值。有人可以帮我吗?
答案 0 :(得分:6)
您也可以使用aggregate
。有关详细信息,请参阅?aggregate
。
> aggregate(.~names, FUN=mean, data=df[, -2])
names Y1 Y2
1 Aroma 4.446667 7.433333
2 Katja 5.693333 7.666667
3 William 4.390000 7.766667
Take a look at this post为每个群体采取另一种选择。
对于条形图,使用R base barplot
函数,尽管还有其他替代方法,例如ggplot2图形。
barplot(DF[,2], names.arg=DF$names, ylab="mean of Y1", las=1) # for Y1
barplot(DF[,3], names.arg=DF$names, ylab="mean of Y2", las=1) # for Y2
产生:
由于您是R的新手,我建议您阅读An introduction to R,这是您学习R基础知识的良好起点。
答案 1 :(得分:0)
使用sqldf
包(假设df
是您的表)
library(sqldf)
sqldf("SELECT names, avg(Y1) as mean_Y1, avg(Y2) as mean_Y2 FROM df GROUP BY names")