以有条件的方式在 R 中使用 sample()
Using sample() in R in a conditional way
我想为每个 A 数分配一个随机数 B。
条件是B分配的number必须大于A对应的number。
这是我的代码。
有什么方法可以更快地做到这一点?
我尝试了 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) } )
我不确定我是否正确理解了你的问题,但也许你想要类似这样的东西:
set.seed(123)
A <- sample(10000, 10000)
rnd.sample <- function(x) {
i <- 1
B <- c()
for (i in 1:length(x)) {
success <- FALSE
while(success == FALSE) {
s <- sample(100000, 1)
if (s > x[i]) {
success <- TRUE
B[i] <- s
i <- i + 1
} else {}
}
}
return(data.frame(A = x, B))
}
head(rnd.sample(A), 10)
# A B
# 1 2876 31060
# 2 7883 32453
# 3 4089 87026
# 4 8828 32868
# 5 9401 12571
# 6 456 35623
# 7 5278 93070
# 8 8918 87518
# 9 5510 82022
# 10 4563 63124
对于 A 中的每个元素 a
,从 B 中大于 a
的元素中采样一个实例将给出:
sapply(A, function(a) sample(B[B > a], size = 1, replace = TRUE))
如果不够快,您可以使用 mclapply 而不是 sapply
来并行化(这应该没问题,因为您使用的是 replace = TRUE
并且采样是独立的) .
我想为每个 A 数分配一个随机数 B。
条件是B分配的number必须大于A对应的number。
这是我的代码。
有什么方法可以更快地做到这一点?
我尝试了 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) } )
我不确定我是否正确理解了你的问题,但也许你想要类似这样的东西:
set.seed(123)
A <- sample(10000, 10000)
rnd.sample <- function(x) {
i <- 1
B <- c()
for (i in 1:length(x)) {
success <- FALSE
while(success == FALSE) {
s <- sample(100000, 1)
if (s > x[i]) {
success <- TRUE
B[i] <- s
i <- i + 1
} else {}
}
}
return(data.frame(A = x, B))
}
head(rnd.sample(A), 10)
# A B
# 1 2876 31060
# 2 7883 32453
# 3 4089 87026
# 4 8828 32868
# 5 9401 12571
# 6 456 35623
# 7 5278 93070
# 8 8918 87518
# 9 5510 82022
# 10 4563 63124
对于 A 中的每个元素 a
,从 B 中大于 a
的元素中采样一个实例将给出:
sapply(A, function(a) sample(B[B > a], size = 1, replace = TRUE))
如果不够快,您可以使用 mclapply 而不是 sapply
来并行化(这应该没问题,因为您使用的是 replace = TRUE
并且采样是独立的) .