Pertanyaan Tidak dapat menggunakan i.field dan by = dalam ekspresi data.table yang sama


Ketika bergabung dengan dua tabel data dan menggunakan by= dalam ekspresi yang sama saya mendapatkan kesalahan setiap kali saya mencoba menggunakan kolom dari data dalam.tabel di j. Saya dapat memecah banyak hal menjadi dua ekspresi terpisah tetapi itu adalah pengetikan tambahan - dan mungkin kinerja terpukul ketika menggunakan dataset besar

Sebagai contoh

require(data.table)
DT1 <- data.table(k1 = 1:2, k2 = c('a', 'a', 'a', 'b', 'b', 'c'), v1 = 1:6, key = 'k2')
DT2 <- data.table(k1 = c('a', 'b', 'c'), w1 = 3^(1:3), key = 'k1')

DT1[DT2, sum(v1*w1), by=k1]    # fails complaining about being unable to find w1
DT1[DT2, sum(v1*i.w1), by=k1]  # also fails with the same error
DT1[DT2][, sum(v1*w1), by=k1]  # works

Dengan data kecil mengatur bergabung maka pendekatan grup baik-baik saja. Untuk dataset dengan banyak kolom, bagaimanapun, menciptakan hasil sementara dengan semua kolom dari kedua data tersebut.tabel adalah beban yang signifikan (tabel data aktual saya kira-kira 1-2 Gb dalam ukuran).

Sementara saya bisa mengecilkan jumlah kolom yang terlibat dengan melakukan

DT1[DT2[,.(k1, w1)]][,sum(v1*w1),by=k1]

yang menghilangkan salah satu nilai besar dari data.tabel - tidak harus secara konstan menentukan hubungan antara kumpulan data. Ini juga mengharuskan saya mengingat kolom tertentu di dua tempat berbeda setiap kali saya bergabung.

Apakah ada yang jelas saya hilang?


6
2018-02-04 06:03


asal


Jawaban:


Mungkin duplikat pertanyaan dengan tautan ke permintaan fitur data.table # 733.


0
2017-08-31 09:50