Nat*_*ate 1 r sample random-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))
Run Code Online (Sandbox Code Playgroud)
ÿ
[,1] [,2] [,3] [,4]
[1,] 2 1 2 6
[2,] 3 6 3 3
[3,] 5 7 5 5
Run Code Online (Sandbox Code Playgroud)
随机
[,1] [,2]
[1,] 2 6
[2,] 3 3
[3,] 5 5
Run Code Online (Sandbox Code Playgroud)
对于原始矩阵中的重复值,我无法判断是否从列1或列3中采样了随机[1,1],因为它们都具有值2.因此,匹配在此处不起作用.
伴随着矩阵"随机",我还想要一个矩阵,它以相同大小的矩阵给出每个值被采样的列.例如,例如:
[,1] [,2]
[1,] 1 4
[2,] 1 3
[3,] 3 4
Run Code Online (Sandbox Code Playgroud)
谢谢!
您需要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
Run Code Online (Sandbox Code Playgroud)