Here's a way, first I'll create a fake data set.
r <- raster(matrix(1:30, 5, 6))
## this is the full data set in data frame form
dfull <- as.data.frame(r, xy = TRUE)
## this is the partial data set, only the points with a valid value
## row-order doesn't matter, but we keep it for illustration
dpart <- dfull[sort(sample(seq_len(nrow(dfull)), 22)), ]
Now we need raster's cell-abstraction tools. Here we can treat
r like an raw specification of the original raster, and in fact create it from scratch if needed. But, we have it so we use it.
rspec <- raster(r) ## this drops the data, keeps the structure
This fills the data with missing values , because raster doesn't truly have "sparse forms", they are either empty or full and we cannot put values piece-wise into an empty raster, it's either all or nothing until it's not empty.
(Note that sparse forms are supported completely by this approach, but via a level of abstraction that is the responsibility of the user)
rspec <- NA_real_
Now we need an index into the "structure of the raster" for our points.
## these names were nominated above, and might be different for a different
cells <- cellFromXY(rspec, as.matrix(dpart[, c("x", "y")])
Now, put the values in the data frame into the otherwise "filled with missing" raster.
rspec[cells] <- dpart$layer
All this is illustrated in full here: http://rpubs.com/cyclemumner/294656
It's a very powerful approach, but it's not widely understood and it's easy to get it wrong, so do use with caution and take time to practice and understand it.
Happy to help if it doesn't make sense.