Sadece merak katılmak gibidış dış yapmak için etkili bir yol var veri tablosuyla birleşimler ise data.table R
a <- data.table(a=c(1,2,3),b=c(3,4,5))
b <- data.table(a=c(1,2),k=c(1,2))
merge(a,b,by="a",all.x=T)
bu çalışıyor, ancak iç daha büyük verilerle katılmak olduğunca verimli değildir Aşağıdaki gibi çok hızlı çalışır, ancak yukarıdaki gerçekten çok yavaş.
setkey(a,a)
setkey(b,a)
a[b,]
İlk durumda, "a" ve "b" anahtarsızdır, bu nedenle "birleştirme" ilk önce onları (yerel kopyaların (tür) birleştirme içinde olması gerektiğinden "a" ve "değiştirmek" istemez. arama kapsamı. İkinci durumda, “a” ve “b” harflerini değiştirerek mutlu olursunuz (bunu yapmak için zaman eklediniz mi?) Ve sonra “a [b]” hızlıdır. Ama ben bile şaşırdım, büyük bir fark var. 'merge' _should_ 'x [y] 'ile oldukça karşılaştırılabilir. Zamanlamaları hakkında konuşurken lütfen sürüm bilgisini belirtin: v1.8.6'da mısınız? Ayrıca "çok hızlı" ve "çok yavaş" kelimeleriniz "benzer" fikrim olabilir! Gerçek zamanlar nelerdir? –
Kötü/uygunsuz bir şekilde kıyaslama yapmak çok kolay, bu yüzden kesinlikle bir şey söylemeden önce zamanlama yönteminizi görmemiz gerekiyor. –
Bunun için zaman ayırabildim ve bellekte ilk patlayan R oturumu çöktü (yaklaşık 19m satırları birleştirerek). Daha küçük bir setle karşılaştırmalıyım ve sonuçları yayınlayacağım. (sürüm 1.8.2, kullanıyorum) – jamborta