通过一个因素获得平均值

Getting the Mean by a Factor

全部,这个函数是我写的,但是有缺陷:

X=cbind(rep(1:5,4),rep(c(1,2,4,8,16),2),c(3.4,4,45,6,4,2,36,4,34,7,8,0,2,4,5,7,9,12,23,1))
getXbarl<-function(Y,l){
  xbar=tapply(Y,l,mean)
  return(matrix(xbar[l]))#***
}
#It works for the first row:
getXbarl(X[,3],X[,1])
#but not the second row, because the factors are no longer 1:5 here. 
getXbarl(X[,3],X[,2])

请帮我写一个修复。问题是对于xbar[l]***,它不再对应于index.

getXbarl<-function(Y,l){
  xbar=tapply(Y,l,mean)
  l2=factor(l,labels=1:length(xbar))
  return(matrix(xbar[l2]))
}
X=cbind(rep(1:5,4),rep(c(1,2,4,8,16),2),c(3.4,4,45,6,4,2,36,4,34,7,8,0,2,4,5,7,9,12,23,1))

getXbarl(X[,3],X[,1])

getXbarl(X[,3],X[,2])

我觉得你需要ave

ave(X[,3], X[,2])

作为函数

getXbarl2 <- function(Y,l) matrix(ave(Y,l))
identical(getXbarl(X[,3], X[,1]), getXbarl2(X[,3], X[,1]))
#[1] TRUE