рдореИрдВ рдЕрдХреНрд╕рд░ рдХрд░рддрд╛ рд╣реВрдБ
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
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ colA
рдФрд░ colB
рдХрдо рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХреВрдВред рдПрдлрдЖрд░ рдпрд╣рд╛рдБ рдХреЗ рд▓рд┐рдП рд╣реИ
CJ(colA, colB, unique=TRUE, names=TRUE)
colA
рдФрд░ colB
рдирд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж data.frame() рдФрд░ data.table() ( make.names
?) рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред
(рдирд╛рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдФрд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ on=.Icols
рдПрдХ рдЪреАрдЬ рдереА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ FR рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред)
рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SO рдкреЛрд╕реНрдЯ ...
CJ
рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ ...
CJ
рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП AFAIK рд╣рдореЗрдВ рдЗрд╕реЗ CJ(x, ...)
рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ # 1090
+1 рдФрд░ рдореБрдЭреЗ names
рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА - рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред setkey
рдмрдЬрд╛рдп "рдЪрд╛рд▓реВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕реНрдЯрд┐рдХрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдмрди рдЧрдпрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ unique = TRUE
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ - рдореИрдВ _ever_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ CJ
рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@jangorecki рдореИрдВрдиреЗ рдЕрднреА рддрдХ #1090/#814 рд╕рд╛рдорд╛рди рдХреЛ рдирд╣реАрдВ рдЫреБрдЖ рд╣реИред рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
+1 рдФрд░ рдореБрдЭреЗ
names
рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА - рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредsetkey
рдмрдЬрд╛рдп "рдЪрд╛рд▓реВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕реНрдЯрд┐рдХрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдмрди рдЧрдпрд╛ рд╣реИредрдореИрдВ рдпрд╣ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐
unique = TRUE
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ - рдореИрдВ _ever_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛CJ
рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред