在这个网站上的人的帮助下,我有一个矩阵 y
看起来与此类似(但更简化)。
1,3
1,3
1,3
7,1
8,2
8,2
我创建了第三列来生成随机数(无需使用此代码替换每个重复 block j=cbind(y,sample(1:99999,y[,2],replace=FALSE) )
。
矩阵 j
看起来像这样:
1,3,4520
1,3,7980
1,3,950
7,1,2
8,3,4520
8,3,7980
8,3,950
我如何为我的第三列获得真正的随机数,以便对于每个重复行,即 3,然后 1,然后 2,我得到一个随机数,该随机数不会在该重复部分中复制(replace = FALSE
)?
最佳答案
为什么会这样:
问题是 sample
命令结构是:
sample(vector of values, how many?, replace = FALSE or TRUE)
在这里,“有多少?”应该是一个值。由于您提供了 y
的整个第二列,它只选择第一个值,即 3
,因此它显示为:
set.seed(45) # just for reproducibility
sample(1:99999, 3, replace = F)
对于这个种子,值是:
# [1] 63337 31754 24092
并且由于只有 3 个值,您将它绑定(bind)到具有 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
查看值是否重复。对于您显示的矩阵,我不知道 7,1,2
是如何发生的。作为 y[,2] = 3
中矩阵的第一个值。
您应该怎么做:
y <- cbind(y, sample(1:99999, nrow(y), replace = FALSE))
这要求 sample
生成 nrow(y) = 6
(这里)值而不用替换。这将生成长度为 6 的不同值,并将绑定(bind)到您的矩阵 y
。
关于R 使用样本创建具有随机数的矩阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163355/