首页 文章

R:从矩阵到列表到矩阵:订单问题

提问于
浏览
0

我有一个问题,在过去的四个小时里,我无法解决问题,所以我想知道你是否有人可以帮助我 . 要查看我的问题,让我们从一个示例开始:

tmp <- matrix(1:24, ncol=2)
fac <- rep(1:5, length.out=12)

基于因子水平 fac ,我想将函数应用于共享相同因子水平的 tmp 的所有元素 . 我最终使用 by ,但如果这不合适,请不要犹豫,指出来 .

new <- by(tmp, fac, function(x) x <- x*sign(rbinom(1,1,.5)-0.5) )

这会将每个组乘以1或-1 .

现在的问题是:我希望最终得到与之前相同的矩阵,即在我的例子中使用 tmp (只是某些观察组已经乘以-1) . 我尝试过以下方法:

new.tmp <- matrix(unlist(new), ncol=ncol(tmp))

但事实证明,行的顺序是混合的 . 这是可以理解的,因为 by 命令将我的矩阵强制转换为数据帧,并根据我的因子获取数据帧的子集 . 有没有办法将所有内容重新组合在一起,以便保留初始行顺序?

请注意,与我的示例矩阵不同,我的实际数据集在列中没有有序值 .

我真的很感激任何帮助!

1 回答

  • 3

    我认为这应该有效:

    tmp     = matrix(1:24, ncol=2)
    fac     = rep(1:5, length.out=12)
    new     = tapply(fac, fac, function(x) sign(rbinom(1,1,.5)-0.5) )
    
    new.tmp = tmp*as.numeric(new[fac])
    

相关问题