我有一个问题,在过去的四个小时里,我无法解决问题,所以我想知道你是否有人可以帮助我 . 要查看我的问题,让我们从一个示例开始:
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 回答
我认为这应该有效: