随机抽样 - 矩阵

Gag*_*lva 4 r random-sample

如何从填充了1和0的矩阵中取样n个随机点?

a=rep(0:1,5)
b=rep(0,10)
c=rep(1,10)
dataset=matrix(cbind(a,b,c),nrow=10,ncol=3)

dataset
      [,1] [,2] [,3]
 [1,]    0    0    1
 [2,]    1    0    1
 [3,]    0    0    1
 [4,]    1    0    1
 [5,]    0    0    1
 [6,]    1    0    1
 [7,]    0    0    1
 [8,]    1    0    1
 [9,]    0    0    1
[10,]    1    0    1
Run Code Online (Sandbox Code Playgroud)

我想确定我的N个样本的位置(行,col)是随机的.

我知道,sample {base}但它似乎不允许我这样做,我知道的其他方法是空间方法将迫使我添加x,y并将其更改为空间对象并再次返回到正常矩阵.

更多信息

随机意味着我也意味着在"矩阵空间"内部传播,例如,如果我对4个点进行采样,我不希望得到4个相邻点,我希望它们在"矩阵空间"中传播.

知道矩阵中我取出随机点的位置(行,列)也很重要.

And*_*rie 12

如果您了解R在内部表示矩阵作为向量,则有一种非常简单的方法可以对矩阵进行采样.

这意味着您可以sample直接在矩阵上使用.例如,假设您想要替换10个点:

n <- 10
replace=TRUE
Run Code Online (Sandbox Code Playgroud)

现在只需使用sample你的矩阵:

set.seed(1)
sample(dataset, n, replace=replace)
 [1] 1 0 0 1 0 1 1 0 0 1
Run Code Online (Sandbox Code Playgroud)

为了演示这是如何工作的,让我们将其分解为两个步骤.第1步是生成采样位置的索引,第2步是在矩阵中找到这些位置:

set.seed(1)
mysample <- sample(length(dataset), n, replace=replace)
mysample
 [1]  8 12 18 28  7 27 29 20 19  2

dataset[mysample]
 [1] 1 0 0 1 0 1 1 0 0 1
Run Code Online (Sandbox Code Playgroud)

并且,嘿presto,两种方法的结果是相同的.