如何用它们的平均值替换值?

时间:2015-11-16 13:01:57

标签: r

我有两个矩阵

 A = matrix(c(2, 2, 2, 3, 3, 3),nrow=3,ncol=2) 
> A
      [,1] [,2]
[1,]    2    3
[2,]    2    3
[3,]    2    3
B = matrix(c(2, 4, 3, 1, 5, 7),nrow=3, ncol=2) 
> B 
      [,1] [,2]
[1,]    2    1
[2,]    4    5
[3,]    3    7

取B中对应于B中3的所有值的均值: 创建一个只有以下方式的矩阵: 通缉矩阵:

    C

        [,1] [,2]
 [1,]    3    4.3
 [2,]    3    4.3
 [3,]    3    4.3

2 个答案:

答案 0 :(得分:1)

当这些组不是特定于列时,这可能会有所帮助:

A <- matrix(   c(2, 2, 2, 3, 3, 3),nrow=3,ncol=2) 
B <- matrix(c(2, 4, 3, 1, 5, 7),nrow=3, ncol=2) 
C <- matrix(nrow = dim(A)[1], ncol=dim(A)[2])

groups <- unique(c(A))
for(group in groups) {
  C[which(A==group)] <- mean(B[which(A==group)])
}

如果A包含NA个值,请使用

groups <- na.omit(unique(c(A)))

答案 1 :(得分:1)

怎么样:

A <- matrix(c(2, 2, 2, 3, 3, 2, 3, 2), nrow=4, ncol=2) 
B <- matrix(c(2, 4, 3, 1, 5, 7, 4, 2), nrow=4, ncol=2) 

matrix(tapply(B, A, mean)[as.character(A)], nrow=nrow(A))