2017-11-22 25 views
2

각 A 수에 대해 B의 난수를 할당하려고합니다. 조건은 B의 할당 된 수를 A의 해당 수보다 커야한다는 것입니다. 여기에 있습니다. 내 코드 야. 더 빠르게 수행 할 수있는 방법이 있습니까?
최악의 결과로 for 루프 및 다른 방법을 시도했습니다! 감사합니다.조건부 방식으로 R에서 sample()을 사용합니다.

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

확실하지 않습니다. 완전히 이해합니다. A와 B가 서로 다른 크기라면, "B의 숫자는 A의 해당 숫자보다 커야합니다"라는 의미는 무엇입니까? –

+1

B를 얻기 위해 A에 추가 할 양수를 임의로 선택하지 않는 이유는 무엇입니까? – MrFlick

+0

감사합니다. Matt. 예, A와 B는 크기가 다릅니다. B가 더 큽니다. A의 각 값에 대해 A의 해당 값보다 큰 B의 난수를 찾고 싶습니다. –

답변

0

제가 제대로 질문을 이해하지만, 어쩌면 당신이 비슷한 원하는 확실하지 않다 : B의 ​​요소에서 하나 개의 인스턴스를 샘플링,

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 
+0

내 대답이 업데이트되었습니다. 확인하십시오. – jsb

+0

고마워,하지만 이건 내가 필요로하는 것이 아니다. A에서 10,000 클레임 금액이 있다고 상상해보십시오. B에는 100,000 개의 보험 정책이 있으며 각각의 위험에 대해 보험에 가입되어 있습니다. 나는 각각의 주장을 무작위로 정책에 할당하려고한다. 그러나 조건은 보험이 주장보다 커야한다는 것입니다. –

+0

내 답변을 다시 업데이트했습니다. 확인하십시오. – jsb

0

각 요소 a A의 위해를하는 충분히 빨리 아니라면

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

, 당신은 mclapply를 사용하는 대신수 있습니다 a보다 큰는 다음과 같다 될 수 있습니다을 병렬 처리하십시오 (replace = TRUE을 사용하고 있으며 샘플링은 독립적이므로).