【问题标题】:How to calculate the mean of specific rows in R?如何计算R中特定行的平均值?
【发布时间】:2013-09-12 13:09:23
【问题描述】:

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

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 轴上是平均值。有人可以帮我解决这个问题吗?

【问题讨论】:

标签: r mean


【解决方案1】:

您也可以使用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 基础知识的一个很好的起点。

【讨论】:

    【解决方案2】:

    使用sqldf 包(假设df 是您的表)

    library(sqldf)
    sqldf("SELECT names, avg(Y1) as mean_Y1, avg(Y2) as mean_Y2 FROM df GROUP BY names")
    

    【讨论】:

    • 它允许您对数据帧执行SQL 查询。如此细分,查询按名称列对表进行分组,然后提取名称、Y1 的平均值和 Y2 的平均值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2021-02-08
    相关资源
    最近更新 更多