以条件方式在R中使用sample()

时间:2017-11-22 15:55:02

标签: r random sample

我想为每个A号分配一个随机数B. 条件是B分配的数字必须大于A的相应数字。 这是我的代码。 有没有办法更快地做到这一点?
我尝试使用for循环和其他方法,结果最差! 非常感谢!

set.seed(123)
A <- rlnorm(10000,5,1) 
B <- rlnorm(100000,10,2)
df <- data.frame(NumPol=1:length(B), Cap=B)

pol_sel <- sapply(1:length(A), FUN = function(i) { 
sample(df$NumPol[which(df$Cap > A[i])], size=1, replace=TRUE) } )

1 个答案:

答案 0 :(得分:0)

对于A中的每个元素a,从B中大于a的元素中抽取一个实例将由下式给出:

sapply(A, function(a) sample(B[B > a], size = 1, replace = TRUE))

如果速度不够快,您可以使用mclapply代替sapply进行并行化(这应该没问题,因为您使用replace = TRUE并且采样是独立的。)< / p>