R中的变量样本上限值

时间:2015-07-21 01:02:14

标签: r random-sample

我有以下矩阵

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
colnames(x) = c("Y","Z")
m <-data.frame(m)

我试图在每一行中创建一个随机数,其中上限是基于变量值的数字(在这种情况下,1 * Y基于Z的每一行的值)

我目前有:

 samp<-function(x){
    sample(0:1,1,replace = TRUE)}

    x$randoms <- apply(m,1,samp)

哪个工作能够很好地将样本函数独立应用到每一行,但是当我尝试更改样本中的x时,我总是会遇到错误。我以为我可以这样做:

samp<-function(x){
        sample(0:m$Z,1,replace = TRUE)}

        x$randoms <- apply(m,1,samp)

但我猜这是一厢情愿的想法。

最终我想要结果:

 Y Z randoms
 2 5       4
 4 7       7
 3 9       3
 5 3       1
 1 7       6

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

以下内容将针对每一行从0到x$Y进行采样,并将结果存储在randoms中:

x$randoms <- sapply(x$Y + 1, sample, 1) - 1

说明:

sapply分别获取x$Y中的每个值(让我们称之为y),并在其上调用sample(y + 1, 1)

请注意(例如)sample(y+1, 1)将对范围1:(y+1)中的1个随机整数进行采样。由于您需要一个从0到y而不是1到y + 1的数字,我们最后会减去1。

另外,只是指出 - 这里不需要replace=T因为你只是取样一个值,所以它是否被替换无关紧要。

答案 1 :(得分:1)

根据@ mathematical.coffee建议和我编辑的例子,这是光滑的最终结果:

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
 colnames(m) = c("Y","Z")
m <-data.frame(m) 

samp<-function(x){
sample(Z + 1, 1)}

m$randoms <- sapply(m$Z + 1, sample, 1) - 1