2017-05-24 3 views
1

큰 데이터 프레임이 100,000 개의 행으로 구성되어 있으며 데이터의 일반 이름을 기반으로 다른 데이터 프레임의 하위 세트 샘플을 값으로 사용하는 열을 추가하고 싶습니다. 프레임. 그때 colAcolB의 적절한 부분 집합에 대한 sampleDFsample 컬럼의 무작위 표본 인 samplelargeDF에 새 열을 추가 할다른 데이터 프레임의 서브 세트에서 무작위로 샘플 가져 오기

largeDF <- data.frame(colA = c('a', 'b', 'b', 'a', 'a', 'b'), 
         colB = c('x', 'y', 'y', 'x', 'y', 'y'), 
         colC = 1:6) 

sampleDF <- data.frame(colA = c('a','a','a','a','b','b','b','b','b','b'), 
         colB = c('x','x','y','y','x','y','y','y','y','y'), 
         sample = 1:10) 

... 예제와 함께 설명하기가 쉬울 수 있습니다.

는 예를 들어, 첫 번째 행의 값은 ax이므로 값은 다음의 행 (by)는 6, 7, 8, 9 or 10 무작위 샘플 것이다위한 1 또는 2의 랜덤 표본 일 것이다.

rowA rowB rowC sample 
1 a x 1  2 
2 b y 2  9 
3 b y 3  7 
4 a x 4  2 
5 a y 5  4 
6 b y 6  8 

어떤 도움을 주시면 감사하겠습니다 :

그래서 우리는 같은 것을 끝낼 수 있었다!

+0

생각 6, 7. 8. 9. 10} 귀하의 예에서)? – Pop

답변

1

dplyr를 사용하여 (이것은 몇 가지 경고를 발생하지만, 작업 표시 어쨌든.)

library(dplyr) 

largeDF <- largeDF %>% group_by(colA,colB) %>% 
      mutate(sample=sample(sampleDF$sample[sampleDF$colA==colA & sampleDF$colB==colB], 
        size=n(),replace=TRUE)) 

largeDF 

    colA colB colC sample 
    <fctr> <fctr> <int> <int> 
1  a  x  1  2 
2  b  y  2  6 
3  b  y  3  9 
4  a  x  4  1 
5  a  y  5  4 
6  b  y  6  9 
0

질문을 이해할 수 없지만 하위 샘플의 "샘플"열만 샘플링 한 대형 데이터 프레임에 새 열을 추가하는 것 같습니다 ... 다음 코드가 제공되는지 확인하십시오 기능에 대한 아이디어는 당신이 필요합니다

cbind.data.frame(largeDF, sample = sample(sampleDF$sample, nrow(largeDF))) 
# colA colB colC sample 
#1 a x 1  9 
#2 b y 2  10 
#3 b y 3  1 
#4 a x 4  3 
#5 a y 5  6 
#6 b y 6  7 
+0

문제가 해결 되었습니까? –

1

당신은 이런 식으로 뭔가를 할 수 :

largeDF$sample <- apply(largeDF,1,function(a) 
        with(sampleDF, sample(sampleDF[colA==a[1] & colB==a[2],]$sample,1))) 
0

나는이 colA`와`colB` 값과 샘플링 도메인 ({1, 2}와 { '사이의 정확한 관계는 무엇 당신을 위해 하나 개의 가능한 솔루션 ...

library(dplyr) 
largeDF_sample <- sapply(1:nrow(largeDF), function(x) { 
    sampleDF_part = filter(sampleDF, colA==largeDF$colA[x] & colB==largeDF$colB[x]) 
    return(sample(sampleDF_part$sample)[1]) 
}) 
largeDF$sample <- largeDF_sample