İki anahtar içeren bir data.table var: Year (10 levels) ve MemberID (200,000 levels). Ben setkey, setkey(MemberID, Year)
farklı performans ile setkey(Year, MemberID)
karşılaştırmaktır? Eğer öyleyse, hangi yol daha iyi olacak?Data.table maddesindeki tuşların sırası mu?
7
A
cevap
8
Anahtar ayarının performansı ve hızı, anahtar değişken türlerine bağlı olacaktır. numeric
sütunları integer
'dan daha yavaş olacaktır. character
sütunları (kısa dizeler olduğunda) hızlı görünüyor.
örn
library(data.table)
set.seed(1)
DIC <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIC2 <- copy(DIC)
DIF <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.factor(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIF2 <- copy(DIF)
DNC <- data.table(year = sample(as.numeric(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DNC2 <- copy(DNC)
DCC <- data.table(year = sample(as.character(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DCC2 <- copy(DCC)
DII <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(seq_len(2e5), 5e6, TRUE), z = rnorm(5e6))
DII2 <- copy(DII)
Bazı zamanlamaları yolu daha iyi olacaktır hangi olarak
# key of integer, character columns
system.time(setkey(DIC, year ,id))
user system elapsed
3.21 0.11 3.31
system.time(setkey(DIC2, id, year))
user system elapsed
3.43 0.03 3.45
# key of integer factor columns
system.time(setkey(DIF, year ,id))
user system elapsed
6.31 0.05 6.37
system.time(setkey(DIF2, id, year))
user system elapsed
6.44 0.06 6.54
# key of numeric, character columns
system.time(setkey(DNC, year ,id))
user system elapsed
9.91 0.07 10.29
system.time(setkey(DNC2, id, year))
user system elapsed
10.11 0.07 10.34
# key of two character columns
system.time(setkey(DCC, year ,id))
user system elapsed
3.34 0.05 3.40
system.time(setkey(DCC2, id, year))
user system elapsed
3.40 0.02 3.42
# key of two integer columns
system.time(setkey(DII, year ,id))
user system elapsed
6.25 0.02 6.53
system.time(setkey(DII2, id,year))
user system elapsed
6.44 0.05 6.64
. Bu muhtemelen büyük olasılıkla tek başınıza daha çok alt gruplara ayrıldığınıza bağlı olacaktır. Eğer o zaman
D[J(1)]
kullanabilirsiniz year, id
olarak anahtar kurduysanız ancak anahtar id, year
olarak kurulmuştur
Örneğin, yılın 1.
tüm verilerini almak gerekebilir o zaman daha yazarak ve bu unique(id)
hesaplamak zorundadır olarak uzun sürer hangi
D[J(unique(id),1), nomatch = 0]
gerekir.
İkincil bir anahtara izin veren bir özellik isteği var. FR#1007, ancak bu henüz uygulanmadı. Şu anda birden fazla sütunu işgal edebilecek tek bir anahtar var.
İlgili konular
- 1. Kayıtların sırası kategoriyi belirlediğinde bir data.table nasıl yeniden şekillendirebilirim?
- 2. data.table
- 3. data.table -
- 4. r data.table
- 5. python sözlüğünde uzun (str) tuşların verimliliği
- 6. Mongodb - alt belgeler için tuşların regex eşleşmesi
- 7. Drupal hook_cron yürütme sırası
- 8. Liste kavramasından gelen sonuçların sırası garanti ediliyor mu?
- 9. Z-sırası
- 10. Realm: Kayıtların sırası değiştirildi
- 11. data.table: Başka içine bazı veri formu bir data.table birleştirmek gerekir
- 12. "iç" data.table filtrelemek için "dış" data.table içinde "by-argument" kullanma
- 13. Başka bir data.table sütununu eşleştirerek data.table alt kümesini silebilir
- 14. Django templatetag "işleme sırası"
- 15. Çokgenler için satır sırası
- 16. Örnekleme ile data.table birleştirilmesi
- 17. R Data.Table Şartlar Katıl
- 18. R data.table hata NA
- 19. data.table "tuşuna endeksleri" veya
- 20. Bir değişken data.table normalleştirin
- 21. Data.table için Sarıcı işlevleri
- 22. değerlendirme ve alıntı data.table
- 23. data.table, aşağıdaki kod parçasında
- 24. R data.table koşullu seçimi
- 25. Boru hattı ile çalışma sırası
- 26. Yapıcı başlatma listesindeki yürütme sırası
- 27. Yacc'da azaltma sırası tanımlandı mı?
- 28. R'nin data.table dosyasında, .SD kullanılarak başvurulan altküme korunan bir data.table anahtarı nasıl açılır?
- 29. R data.table sayım paneli verileri
- 30. transkript vektörü data.table içinde gruplandırılmıştır
Çok teşekkürler mnel. – AdamNYC