If this is your data set
temp <- read.table(text = "row1 key1 10
row2 key1 12
row3 key1 NA
row4 key2 2
row5 key2 3
row6 key2 NA", header = F)
library(data.table)
setDT(temp)[, V3 := as.numeric(V3)]
temp[, V3 := lapply(.SD, function(x) ifelse(is.na(x), mean(x, na.rm = T), V3)), .SDcols = "V3", by = V2]