【问题标题】:Average all other columns based on one column in matrix [duplicate]基于矩阵中的一列平均所有其他列[重复]
【发布时间】:2018-11-24 18:03:34
【问题描述】:

我需要根据另一列中的名称对大量列进行平均。我的矩阵看起来像这样(具有单独的唯一行名):

Names       X1  Y1  Z1  X2  Y2  Z2
P.maccus    4   2   2   6   5   3
P.maccus    6   5   3   7   6   5
P.maccus    8   3   2   8   7   3
A.ammophius 3   6   2   7   5   5
P.sabaji    2   5   3   8   4   5
P.sabaji    4   6   3   9   6   5
P.sabaji    5   7   2   8   7   3
P.sabaji    3   5   3   9   5   4

我需要平均每一行看起来像这样:

Names       X1  Y1      Z1      X2  Y2  Z2
P.maccus    6   3.33    2.33    7   6   3.66
A.ammophius 3   6       2       7   5   5
P.sabaji    3.5 5.75    2.75    8.5 5.5 4.25

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你的问题是一个更简单的形式。您想使用 dplyr 包中的 groupbysummarize

标签: r matrix aggregate average mean


【解决方案1】:

使用dplyr 非常简单。你可以做

dd %>% group_by(Names) %>% summarize_all(mean)

用以下数据测试

dd<-read.table(text="Names       X1  Y1  Z1  X2  Y2  Z2
P.maccus    4   2   2   6   5   3
P.maccus    6   5   3   7   6   5
P.maccus    8   3   2   8   7   3
A.ammophius 3   6   2   7   5   5
P.sabaji    2   5   3   8   4   5
P.sabaji    4   6   3   9   6   5
P.sabaji    5   7   2   8   7   3
P.sabaji    3   5   3   9   5   4", header=TRUE)

【讨论】:

    【解决方案2】:

    您可以为此使用aggregate()

    假设您的数据矩阵位于名为 df 的变量中:

    aggregate(. ~ Names, data=df, FUN=mean)
    
            Names  X1       Y1       Z1  X2  Y2       Z2
    1 A.ammophius 3.0 6.000000 2.000000 7.0 5.0 5.000000
    2    P.maccus 6.0 3.333333 2.333333 7.0 6.0 3.666667
    3    P.sabaji 3.5 5.750000 2.750000 8.5 5.5 4.250000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多