2017-11-09 15 views
0

큰 데이터 세트가 있고 샘플링을 원하는 그룹이 여러 개 있습니다. 각 그룹에는 일정한 수의 긍정적 인 경우가 있고 값이 1이고 부정적인 경우가 많으며 값은 0입니다.R - 대형 데이터 세트로 계층화 된 샘플링

각 그룹에 대해 모든 긍정적 인 사례를 선택한 다음 해당 그룹의 양성 사례 양의 4 배에 해당하는 임의의 양의 음성 사례를 선택하려고합니다.

많은 데이터를 빠르게 실행해야하는 항목이 필요합니다.

세미 업데이트 : 올바른 이름에 하위 경우

stratified_sample = data %>% 
    group_by(group) %>% 
    mutate(n_pos = sum(response == 1), 
      n_neg = 4 * n_pos) %>% 
    group_by(group,response) %>% 
    mutate(rec_num = n(), 
     random_val = runif(n()), 
     random_order = rank(random_val)) %>% 
    filter(response == 1 | random_order <= n_neg) 
+0

질문에 [최소 재현 가능한 예] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)를 포함하면 답을 얻을 확률이 높아집니다. . – jsb

답변

0

이 작동합니다. 문제가있는 경우 재현 가능한 예제를 제공하십시오.

library(dplyr) 

stratified_sample = your_large_dataset %>% 
    group_by(whatever_your_grouping_variable_is) %>% 
    mutate(n_pos = sum(column_name_of_your_label == 1), 
      n_neg = sum(column_name_of_your_label == 0), 
      cutoff = 4 * n_pos/n_neg) %>% 
    filter(column_name_of_your_label == 1 | runif(n()) < cutoff) 

이 샘플 비율이 정확하지 않도록/부정적 사례의 숫자가 선택 될 각 부정적인 사건을 긍정적 인 경우 4 * 수의 가능성을 제공하지만 당신이 원하는 기대 값을가집니다.

+0

당신은 저를 정말로 가깝게합니다. 그러나 당신이 컷오프를 어떻게하는지의 성격에 따라 때로는 4 배의 긍정적 인 경우를 주지만 때로는 무작위 값이 어떻게 흔들리는 지에 따라 더 많은 것을 제공합니다. 나는 작업해야하는 코드로 "세미 : 업데이트"를 올렸다. 답변을 변경하거나 답변 크레디트를 수정하십시오. –