通过因子获得均值

时间:2015-04-14 01:14:13

标签: r subset

所有,我写了这个函数,但它有缺陷:

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] ***,它不再对应于索引。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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])