R中的变量样本上限值
Variable sample upper value in R
我有以下矩阵
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
有什么想法吗?
下面将从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
,因为无论如何您只是对一个值进行采样,所以它是否被替换并不重要。
根据@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
我有以下矩阵
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
有什么想法吗?
下面将从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
,因为无论如何您只是对一个值进行采样,所以它是否被替换并不重要。
根据@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