计算R中矩阵的一些条目的平均值

时间:2016-11-21 13:04:01

标签: r

我有两列矩阵。列x的一些条目是相同的,例如,
x [7] == x [8] == -0.11,x [14] == x [15] == x [16] == x [17] == 0.01。

我的问题是:如果列x的条目相同,我该如何计算其相应的v条目的平均值?并且在矩阵中只保留一个x及其v的条目的平均值?例如,对于x [7]和x [8],它们的对应平均值v = mean(v [7] + v [8])。我需要在矩阵中保留一个-0.11和相应的均值。

           x          v
  [1,]  -0.22 2.575144e-02
  [2,]  -0.21 1.991324e-01
  [3,]  -0.15 7.737715e-02
  [4,]  -0.15 2.470678e-02
  [5,]  -0.13 2.135258e-01
  [6,]  -0.12 1.252464e-01
  [7,]  -0.11 1.667752e-01
  [8,]  -0.11 9.163501e-03
  [9,]  -0.10 2.191712e-01
  [10,] -0.08 1.974091e-02
  [11,] -0.02 1.362226e-01
  [12,] -0.01 1.623944e-04
  [13,] -0.01 1.497634e-02
  [14,]  0.01 1.811620e-02
  [15,]  0.01 1.222637e-02
  [16,]  0.01 1.668605e-02
  [17,]  0.01 6.495694e-02
  [18,]  0.03 2.702536e-03
  [19,]  0.03 5.727469e-02

谢谢!

2 个答案:

答案 0 :(得分:1)

基础R解决方案:

> head(aggregate(y ~ x,data=df,mean))
      x       y
1 -0.22 0.02580
2 -0.21 0.19900
3 -0.15 0.05105
4 -0.13 0.21400
5 -0.12 0.12500
6 -0.11 0.08808

答案 1 :(得分:0)

我们在这里做的是,只按“x”分组,然后取相应“v”的平均值。

library(data.table)
setDT(dt)[, mean(v),by = "x"]
#         x          V1
#  1: -0.22 0.025751440
#  2: -0.21 0.199132400
#  3: -0.15 0.051041965
#  4: -0.13 0.213525800
#  5: -0.12 0.125246400
#  6: -0.11 0.087969351
#  7: -0.10 0.219171200
#  8: -0.08 0.019740910
#  9: -0.02 0.136222600
# 10: -0.01 0.007569367
# 11:  0.01 0.027996390
# 12:  0.03 0.029988613