Saya sering melakukannya
DT[CJ(colA = colA, colB = colB, unique=TRUE), on=c("colA","colB")]
# to complete missing levels
# or
DT[, CJ(colA = colA, colB = colB, unique=TRUE)][!DT, on=c("colA","colB")]
# to identify missing levels
# http://stackoverflow.com/a/36065607/1191259
Akan lebih baik jika saya bisa menulis colA
dan colB
lebih sedikit kali. FR di sini untuk
CJ(colA, colB, unique=TRUE, names=TRUE)
untuk menyimpulkan nama colA
dan colB
, mungkin menggunakan metode apa pun yang digunakan oleh data.frame() dan data.table() ( make.names
?).
(Pengulangan nama dapat dikurangi lebih lanjut jika on=.Icols
adalah suatu hal, saya kira, tetapi saya akan membiarkannya untuk FR terpisah.)
SO posting untuk memperbarui ...
CJ
mengambil ...
sebagai argumen pertama, dan fungsi itu akan menjadi metode generik, jadi AFAIK kita perlu mengubahnya menjadi CJ(x, ...)
, perubahan itu dapat dilakukan bersama # 1090
+1 dan saya tidak melihat perlunya argumen names
- ini harus menjadi satu-satunya perilaku. Dengan perubahan sintaks gabungan untuk menggunakan "on" alih-alih setkey
ini telah menjadi poin penting bagi saya.
Saya juga ingin melihat unique = TRUE
menjadi default - saya tidak bisa memikirkan _ever_ tidak perlu unik argumen ke CJ
.
@jangorecki Saya belum menyentuh barang #1090 / #814. lebih baik sebagai mandiri, saya pikir, kecuali saya kehilangan sesuatu
Komentar yang paling membantu
+1 dan saya tidak melihat perlunya argumen
names
- ini harus menjadi satu-satunya perilaku. Dengan perubahan sintaks gabungan untuk menggunakan "on" alih-alihsetkey
ini telah menjadi poin penting bagi saya.Saya juga ingin melihat
unique = TRUE
menjadi default - saya tidak bisa memikirkan _ever_ tidak perlu unik argumen keCJ
.