setNames(data.frame(rep(d$ID, lengths(d$Products)), unlist(d$Products)), names(d))
#OR
do.call(rbind, lapply(asplit(d, 1), function(x) data.frame(lapply(x, unlist))))
Данные
d = structure(list(ID = c(12345, 12346), Products = list(c("a", "b",
"c"), c("x", "y"))), row.names = c(NA, -2L), class = "data.frame")