Birleştirmeye çalıştığım birkaç büyük veri kümem var. Ne yapmak istediğimin bir oyuncak örneğini oluşturdum.Örnekleme ile data.table birleştirilmesi
require(data.table)
set.seed(151)
x <- data.table(a=1:100000)
y <- data.table(b=letters[1:20],c=sample(LETTERS[1:4]))
proportion <- data.table(expand.grid(a=1:100000,c=LETTERS[1:4]))
proportion[,prop:=rgamma(4,shape = 1),by=a]
proportion[,prop:=prop/sum(prop),by=a]
üç tablo x
, y
ve proportion
şunlardır: Üç tablo var. x
'daki her öğe için tablosunun tüm tablolarından tablo proportion
olasılıklarını kullanarak örnek almak ve bunları başka bir tabloya birleştirmek istiyorum. Ben ile geldi yöntemdir:
temp <- setkey(setkey(x[,c(k=1,.SD)],k)[y[,c(k=1,.SD)],allow.cartesian=TRUE][,k:=NULL],a,c)
temp <- temp[setkey(proportion,a,c)][,prop:=prop/.N,by=.(a,c)] # Uniform distribution within the same 'c' column group
chosen_pairs <- temp[,.SD[sample(.N,5,replace=FALSE,prob = prop)],by=a]
Fakat bu bölgelerde ilk ve sonra örnek iki tabloyu çapraz katıldığında bu yöntem bellek yoğun ve yavaştır. Bu görevi verimli (hafıza ve zaman) şekilde gerçekleştirmenin bir yolu var mı?
Neden olasılıkların çözümünüzün ikinci satırında yeniden hesaplanıyorsunuz? – minem
@ MārtiņšMiglinieks Ben bir '(a, c)' çifti için olasılıkları normalleştiriyorum çok sayıda olabilir b ' –
Lookup' .EACHI', çapraz-birleştirirken bu sadece birleştirilmiş bölüm ile ilgilenmek için izin verir işlem, memede tam birleştirme çözülmeden. – Shape