2016-08-31 3 views
0

크기가 (325,928 x 2) 인 데이터 프레임이 있습니다. 여기대용량 데이터 세트 Dcast 함수 (reshape2) 사용

Destination = c('A60001', 'A60001','A60001','A60001','A60001','A60001','A60001','A60001', 
      'A60001','A60001','A60001','A60001','A60001','A60001','A60001','A60001', 
      'A60001','A60001','A60001','A60001','A60001','A60001','A60001','A60001', 
      'A60001', 'A60002', 'A60002','A60002','A60002','A60003') 
Source = c('AA53', 'AA582', 'AA18', 'AA388', 'AA841', 'AA72', 'AA19', 'AA77', 'AA78', 'AA20', 'AA21', 
     'AA12', 'AA412', 'AA634', 'AA591', 'AA859', 'AA157', 'AA254', 'AA167', 'AA176', 
     'AA428', 'AA538', 'AA268', 'AA196', 'AA1250', 'AA23', 'AA16', 'AA692', 'AA196', 
     'AA22') 

df = data.frame(Destination, Source) 

> df 
    Destination Source 
1  A60001 AA53 
2  A60001 AA582 
3  A60001 AA18 
4  A60001 AA388 
5  A60001 AA841 
6  A60001 AA72 
7  A60001 AA19 
8  A60001 AA77 
9  A60001 AA78 
10  A60001 AA20 
11  A60001 AA21 
12  A60001 AA12 
13  A60001 AA412 
14  A60001 AA634 
15  A60001 AA591 
16  A60001 AA859 
17  A60001 AA157 
18  A60001 AA254 
19  A60001 AA167 
20  A60001 AA176 
21  A60001 AA428 
22  A60001 AA538 
23  A60001 AA268 
24  A60001 AA196 
25  A60001 AA1250 
26  A60002 AA23 
27  A60002 AA16 
28  A60002 AA692 
29  A60002 AA196 
30  A60003 AA22 

궁극적 인 목표는 dcast 많은 양의 데이터를 처리 할 수 ​​있기 때문에 dcast 비슷한 무언가를 사용하여 새 dataframe에이 dataframe를 변환하는 것입니다

다음은 데이터의 아주 작은 부분 집합이다.

그래서 여기에 내가이 dataframe으로 시도 원래의 코드였다

test<-dcast(cbind(df,V1 = rep(1,nrow(df))),`Source` ~ Destination,value.var='V1',fun.aggregate = length) 

출력 :

Source A60001 A60002 A60003 
1 AA12  1  0  0 
2 AA1250  1  0  0 
3 AA157  1  0  0 
4 AA16  0  1  0 
5 AA167  1  0  0 
6 AA176  1  0  0 
7 AA18  1  0  0 
8 AA19  1  0  0 
9 AA196  1  1  0 
10 AA20  1  0  0 
11 AA21  1  0  0 
12 AA22  0  0  1 
13 AA23  0  1  0 
14 AA254  1  0  0 
15 AA268  1  0  0 
16 AA388  1  0  0 
17 AA412  1  0  0 
18 AA428  1  0  0 
19 AA53  1  0  0 
20 AA538  1  0  0 
21 AA582  1  0  0 
22 AA591  1  0  0 
23 AA634  1  0  0 
24 AA692  0  1  0 
25 AA72  1  0  0 
26 AA77  1  0  0 
27 AA78  1  0  0 
28 AA841  1  0  0 
29 AA859  1  0  0 

그것은 내가 제공하고있는 데이터 세트와 함께 작동하지만 전체와 그것을 밖으로 테스트 할 때 차원의 데이터 집합 : 325,928 x 2, R이 충돌합니다. 동일한 출력을 생성 할 수 있지만 더 많은 양의 데이터를 처리 할 수있는 더 나은 기능이 있습니까? 이 정보가 충분하지 않다면, 개인적으로 전체 데이터 세트를 제공하여 문제를 해결할 수 있다고 생각하는 사람에게 개인적으로 제공 할 수 있습니다 (StackOverflow가 모든 데이터를 읽을 수 없기 때문에 여기서는 제공 할 수 없습니다). 그래서 직접 문제를 테스트 할 수 있습니다. 출처.

도움이 될 것입니다. 감사합니다. , @Imo 제안에

+0

'data.table'에서'dcast' 함수를 사용해보십시오. – lmo

+0

감사합니다. 이 경우 어떻게 하시겠습니까? 더 큰 데이터 세트에서 시도해 보겠습니다. @Imo –

+2

원본 데이터 형식이 넓은 것보다 훨씬 낫다고 생각합니다. 일종의 분석을 위해 넓은 것을 필요로한다면, 아마도 희소 행렬을 조사 할 것입니다 ...? '325928^2'는 출력물의 잠재적 인 크기로 말하기는 쉽지 않습니다. – Frank

답변

1

덕분이이 해결하는 새로운 솔루션입니다 : 데이터 집합이 넓은/매우 큰 경우

가하는 data.table에 dataframe 변환은 다음 거기에서이

library(data.table) 
df1<-setDT(df) 
new3$value<-1 
trial<-dcast(new3, Source ~ Destination, fill = 0) 

이렇게하면 동일한 결과를 얻을 수 있고 많은 양의 데이터를 처리 할 수 ​​있습니다.

관련 문제