I don't know enough about handling very large data sets to suggest a solution. It seems likely that even if you could generate the output of the complete() function it would be too large to work with on an ordinary computer. You can calculate the number of rows in the output by multiplying the number of levels in each column. For example, in the data set you provided above, there are 127 months, 2 countries, 2 product categories and 3 products. That yields 127 * 2 * 2 * 3 = 1524 rows. The error message you got shows your real data results in more than 2 billion rows. People do work with large data sets like that, though I don't know if R is the right to tool, but is the burden of turning implicit zeros into explicit zeros going to provide an adequate benefit? If it is, then you might want to start a separate topic about handling large data.