1

我试图确定从每行中随机采样的矩阵中采样了哪些列。函数 sample 似乎无法告诉您实际采样了哪些位置。现在,如果所有值都是唯一的,那么一个简单的匹配例程就可以解决这个问题。但是,它们不是我的情况,所以这不起作用。

x <- c(2,3,5,1,6,7,2,3,5,6,3,5)
y <- matrix(x,ncol=4,nrow=3)
random <- t(apply(y,1,sample,2,replace=FALSE))

是的

   [,1] [,2] [,3] [,4]
[1,]    2    1    2    6
[2,]    3    6    3    3
[3,]    5    7    5    5

随机的

     [,1] [,2]
[1,]    2    6
[2,]    3    3
[3,]    5    5

对于原始矩阵中的重复值,我无法判断 random[1,1] 是从第 1 列还是第 3 列采样的,因为它们的值都是 2。因此,匹配在这里不起作用。

伴随矩阵“随机”,我还想要一个矩阵,它在一个相同大小的矩阵中给出每个值的采样列。例如,例如:

     [,1] [,2]
[1,]    1    4
[2,]    1    3
[3,]    3    4

谢谢!

4

1 回答 1

5

您需要sample单独保存随机选择,这样您以后不必担心匹配。例如,y再次使用:

y
#     [,1] [,2] [,3] [,4]
#[1,]    2    1    2    6
#[2,]    3    6    3    3
#[3,]    5    7    5    5

set.seed(42)
randkey <- t(replicate(nrow(y),sample(1:ncol(y),2)))
#     [,1] [,2]
#[1,]    4    3
#[2,]    2    3
#[3,]    3    2

random <- matrix(y[cbind(c(row(randkey)), c(randkey))], nrow(y))
#     [,1] [,2]
#[1,]    6    2
#[2,]    6    3
#[3,]    5    7
于 2013-10-02T23:25:30.860 回答