如何将tapply函数的结果拟合到不同长度的向量中?

时间:2014-12-21 22:31:37

标签: r tapply

例如,我得到了一组包含3个级别的数据,即1,2,3
ab是两个3 * 5矩阵,如下所示:

a <- matrix(c(0.1,0.2,0.3,0.3,0.2,0.1,0.1,0.2,0.3,0.3,0.2,0.1,0.1,0.2,0.3),3)

#     [,1] [,2] [,3] [,4] [,5]
#[1,]  0.1  0.3  0.1  0.3  0.1
#[2,]  0.2  0.2  0.2  0.2  0.2
#[3,]  0.3  0.1  0.3  0.1  0.3

b <- matrix(rep(c(1,2,3,1),c(5,6,2,2)),nrow=3,byrow=TRUE)

#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    1    1    1    1
#[2,]    2    2    2    2    2
#[3,]    2    3    3    1    1

z4 <- tapply(a[,4],as.factor(b[,4]),mean)
z4

  1   2
0.2 0.2 

在这个例子中,输出只有2个级别,我想将z4存储到一个有3个条目的向量中,即。 (0.2,0.2,0)有3个等级,显示为0。

我怎么能这样做?为简单起见,请不要使用任何循环结构。

1 个答案:

答案 0 :(得分:1)

你可以尝试

> z4 <- tapply(a[,4], factor(b[,4], levels = c(1, 2, 3)), mean)
> z4[is.na(z4)] <- 0
> z4
  1   2   3 
0.2 0.2 0.0