, .
X <- data.table(A=rep(1:5, each=4), B=rep(1:4, each=5),
C = letters[1:20], key=c('A','B','C'))
make.key <- function(ddd, what){
zzz <- key(ddd)
whichUnique <- setdiff(zzz, names(what))
ud <- lapply([, ..whichUnique], unique)
do.call(CJ, c(ud,what)[zzz])
}
X[make.key(X, what = list(C = c('a','b'))),nomatch=0]
, , .