R使用样本创建具有随机数的矩阵列

use*_*963 2 r matrix

在这个网站上的人的帮助下,我有一个y类似于此的矩阵(但更简化).

1,3
1,3
1,3
7,1
8,2
8,2
Run Code Online (Sandbox Code Playgroud)

我创建了第三列生成随机数(不使用此代码替换每个重复块)j=cbind(y,sample(1:99999,y[,2],replace=FALSE)).

Matrix j看起来像这样:

1,3,4520
1,3,7980
1,3,950
7,1,2
8,3,4520
8,3,7980
8,3,950
Run Code Online (Sandbox Code Playgroud)

如何为我的第三列获得真正的随机数,使得对于每个重复行,即3,然后是1,然后2,我得到一个未在该重复部分(replace = FALSE)内复制的随机数?

Aru*_*run 5

为什么会这样:

问题是sample命令结构是:

sample(vector of values, how many?, replace = FALSE or TRUE)
Run Code Online (Sandbox Code Playgroud)

在这里,"有多少?" 应该是一个值.由于您提供了第二列的全部内容y,因此它只选择第一个值,3因此它读取为:

set.seed(45) # just for reproducibility
sample(1:99999, 3, replace = F)
Run Code Online (Sandbox Code Playgroud)

对于这个种子,价值观是:

# [1] 63337 31754 24092
Run Code Online (Sandbox Code Playgroud)

而且由于只有3个值,你将它与6行的矩阵绑定,它会"回收"这些值(意思是,它以相同的顺序重复这些值).所以,你得到:

#      [,1] [,2]  [,3]
# [1,]    1    3 63337
# [2,]    1    3 31754
# [3,]    1    3 24092
# [4,]    7    1 63337
# [5,]    8    2 31754
# [6,]    8    2 24092
Run Code Online (Sandbox Code Playgroud)

看到值重复.对于你所展示的矩阵,我不知道它是如何7,1,2发生的.作为矩阵的第一个值y[,2] = 3.

你应该做什么:

y <- cbind(y, sample(1:99999, nrow(y), replace = FALSE))
Run Code Online (Sandbox Code Playgroud)

这要求sample生成nrow(y) = 6(此处)值而不替换.这将产生长度为6的不相同的值,并且将被绑定到矩阵y.