grubu içindeki ilk n satırları seçtiğim gibi, bir veri tablosundaki gruplardaki ilk n satırları seçmek için data.table
çözümünü bilmiyorum. Lütfen bana yardım edebilir misiniz?data.table -
cevap
ile head
kullanabilirsiniz: örnek veri kümesi üzerinde hız baktığımızda head
yöntem .I
method of @eddi ile eşit olduğunu
dt[, .SD[1:3], cyl]
. microbenchmark
paketi ile Karşılaştırılması:
microbenchmark(head = dt[, head(.SD, 3), cyl],
SD = dt[, .SD[1:3], cyl],
I = dt[dt[, .I[1:3], cyl]$V1],
times = 10, unit = "relative")
Sonuçlar:
Unit: relative
expr min lq mean median uq max neval cld
head 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000 10 a
SD 2.156562 2.319538 2.306065 2.365190 2.318540 2.1908401 10 b
I 1.001810 1.029511 1.007371 1.018514 1.016583 0.9442973 10 a
Ancak data.table
özellikle büyük veri setleri için tasarlanmıştır. Yani, yine bu karşılaştırma yürütürken:
# creating a 30 million dataset
largeDT <- dt[,.SD[sample(.N, 1e7, replace = TRUE)], cyl]
# running the benchmark on the large dataset
microbenchmark(head = largeDT[, head(.SD, 3), cyl],
SD = largeDT[, .SD[1:3], cyl],
I = largeDT[largeDT[, .I[1:3], cyl]$V1],
times = 10, unit = "relative")
Sonuçlar:
Unit: relative
expr min lq mean median uq max neval cld
head 2.279753 2.194702 2.221330 2.177774 2.276986 2.33876 10 b
SD 2.060959 2.187486 2.312009 2.236548 2.568240 2.55462 10 b
I 1.000000 1.000000 1.000000 1.000000 1.000000 1.00000 10 a
Şimdi .I
yöntem açıkça hızlı biridir.
Güncelleme 2016/02/12: data.table paketin en son gelişme sürümü ile
, .I
yöntemi hala kazanır. .SD
yönteminin veya head()
yönteminin daha hızlı olup olmadığı, veri kümesinin boyutuna bağlıdır. Şimdi kriter verir: (hala ama oldukça büyük)
Unit: relative
expr min lq mean median uq max neval cld
head 2.093240 3.166974 3.473216 3.771612 4.136458 3.052213 10 b
SD 1.840916 1.939864 2.658159 2.786055 3.112038 3.411113 10 b
I 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 10 a
biraz daha küçük veri kümesi ile Ancak
, oran değiştirin:
largeDT2 <- dt[,.SD[sample(.N, 1e6, replace = TRUE)], cyl]
kriter olduğunu şimdi biraz head
yöntemin lehine .SD
üzerinde yöntemi:
Unit: relative
expr min lq mean median uq max neval cld
head 1.808732 1.917790 2.087754 1.902117 2.340030 2.441812 10 b
SD 1.923151 1.937828 2.150168 2.040428 2.413649 2.436297 10 b
I 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 10 a
Bu, 1.9.7 ile yapıldı mı? '' S'' ile bazı işlemlerin son zamanlarda optimize edilmiş olduğunu biliyorum ... – MichaelChirico
@MichaelChirico Evet, ama 1.9.7 nispeten eski bir sürümünü kullanıyorum ('' rowid' tanıtımı kısa bir süre sonra). Yani, son zamanlarda ne kadar yakın olduğuna bağlı ;-) – Jaap
Ben, ilgili işlemlerin – MichaelChirico
Biz bir alternatif olarak .SD
library(data.table)
dt <- data.table(mtcars)
> dt[, head(.SD, 3), by = "cyl"]
cyl mpg disp hp drat wt qsec vs am gear carb
1: 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4
2: 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4
3: 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1
4: 4 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1
5: 4 24.4 146.7 62 3.69 3.190 20.00 1 0 4 2
6: 4 22.8 140.8 95 3.92 3.150 22.90 1 0 4 2
7: 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2
8: 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4
9: 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3
not aslında 'hea d.data.table' ('getAnywhere (" head.data.table ")'), Jaap'ın yanıtının (biraz daha sağlam) bir sürümünü çağırıyor. – MichaelChirico
- 1. data.table
- 2. r data.table
- 3. data.table: Başka içine bazı veri formu bir data.table birleştirmek gerekir
- 4. "iç" data.table filtrelemek için "dış" data.table içinde "by-argument" kullanma
- 5. Başka bir data.table sütununu eşleştirerek data.table alt kümesini silebilir
- 6. Örnekleme ile data.table birleştirilmesi
- 7. R Data.Table Şartlar Katıl
- 8. R data.table hata NA
- 9. data.table "tuşuna endeksleri" veya
- 10. Bir değişken data.table normalleştirin
- 11. Data.table için Sarıcı işlevleri
- 12. değerlendirme ve alıntı data.table
- 13. data.table, aşağıdaki kod parçasında
- 14. R data.table koşullu seçimi
- 15. Data.table maddesindeki tuşların sırası mu?
- 16. R data.table sayım paneli verileri
- 17. transkript vektörü data.table içinde gruplandırılmıştır
- 18. R data.table Çoklu Koşullar Katıl
- 19. Data.table sütunlarını nasıl yeniden düzenlerim?
- 20. veri dosyasını data.table sütununa dönüştür
- 21. Bir data.table uygulamasında nasıl çalışırım?
- 22. R'nin data.table dosyasında, .SD kullanılarak başvurulan altküme korunan bir data.table anahtarı nasıl açılır?
- 23. Agrega ben aşağıdakilerden eşdeğer yapmak istiyorum data.table
- 24. Devralınan verilerle birlikte data.table içine alın.
- 25. data.table dosyasındaki * bazı * sütun sınıflarını dönüştürebilir
- 26. data.table - tek sütun hariç hepsi bir grup
- 27. filter data.table ile bir sorgu dizesi
- 28. R altbilgi ve özetleme için data.table sözdizimi
- 29. Verilerdeki data.table etkinliğinde çoğaltma yollarım var mı?
- 30. data.table nesneleri Rstudio ortam panelinde güncelleştirilmiyor
bu çok yakındır: http://stackoverflow.com/questions/10110616/throw-away-first-and-last-n-rows – MichaelChirico