1

我有一个如下示例的数据文件,但更大

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 轴上是平均值。有人可以帮我吗?

4

2 回答 2

8

您也可以使用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

查看这篇文章,了解为每个组取平均值的另一种选择。

对于条形图,使用 R 基本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 非常陌生,我建议您阅读R 简介,这是您学习 R 基础知识的一个很好的起点。

于 2013-09-12T13:36:38.610 回答
0

Using the sqldf package (assuming df is your table)

library(sqldf)
sqldf("SELECT names, avg(Y1) as mean_Y1, avg(Y2) as mean_Y2 FROM df GROUP BY names")
于 2013-09-12T13:20:11.890 回答