将复制列添加到矩阵的末尾

时间:2012-02-28 18:22:31

标签: r for-loop

我有一列一列六行。我想复制该列 i 次,但每次都会随机更改一个值,并且在每次迭代后,计算所有列的均值和方差。

例如:

values = rnorm(6, 6, 1); matrix1 = matrix(values, 6)

在i = 1之后,看起来像是:

values2 = values
values2[sample(1:6, 1)] = values2[sample(1:6, 1)]+runif(1, 0, 1)
matrix2 = matrix(c(values, values2), 6)

最后,我想输出一个如下所示的数据框:

i   mean   var
1   1.23  2.31
2   1.24  2.33 etc...

对于许多 i 来说。我想有一种方法可以用循环来做到这一点,但我的技能并不是我能弄清楚的。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

如果你知道你做了多少次,最好事先构建你的最终矩阵,特别是如果我很大的话。但是,如果没有:

jitter.func <- function(x, vec) {
  cell <- sample(1:length(vec), 1)
  vec[cell] <- vec[cell] + runif(1, 0, 1)

  return(c(mean=mean(vec), var=var(vec)))
}


i <- 10
sapply(1:i, jitter.func, vec=values)

答案 1 :(得分:0)

j <- 20 # Number of columns 
i <- 6 # Number of rows
vec <- matrix(rnorm(i,6,1),ncol=j,nrow=i)# vector replicated j times
idx <- sample(seq(i),j,replace=TRUE) # j random rows
vec[cbind(idx, seq(j))] <- vec[cbind(idx, seq(j))]+runif(j) # add random number to random row in each column
apply(vec,2,plyr::each(mean,var)) # summary statistics