As @MLavoie suggested in the comments, generate a new dataframe for the text labels then work with that. This should work for your purposes:
require('ggplot2')
require('dplyr')
df3 <- data.frame(name=c(rep("Alice",10),rep("Bob",10),rep("Eve",10)),value=c(seq(1,10), seq(4,13), seq(5,14)), time=rep(seq(1,10),3))
df3$value[c(3,4,15,16,17,22,23,24,25)]<- NA
NAdf<-df3 %>%
group_by(name) %>%
summarise(ycoor=mean(value, na.rm=TRUE),
xcoor=mean(time, na.rm=TRUE),
num_NA=sum(is.na(value)))
ggplot(data=df3, aes(time, value)) +
geom_line() +
geom_point() +
geom_text(data=NAdf, aes(x=xcoor, y=ycoor, label=paste(num_NA,"for",name))) +
facet_wrap(~ name, nrow=1)
HTH
Updated
In response to the comment below. Generally I find placing text labels into a facetted plot fairly finicky. In your example you could simply define the x and y coordinates as 5,5 for all panels like this:
NAdf<-df3 %>%
group_by(name) %>%
summarise(ycoor=5,
xcoor=5,
num_NA=sum(is.na(value)))
Then you could plot using the same code as before:
ggplot(data=df3, aes(time, value)) +
geom_line() +
geom_point() +
geom_text(data=NAdf, aes(x=xcoor, y=ycoor, label=paste(num_NA,"for",name))) +
facet_wrap(~ name, nrow=1)
The issue with this is that it isn't a generalized solution. In practice though I find you need to fiddle with your geom_text plotting coordinates each and every time to get it just right. Truth be told @Sam Dickson's solution is very elegant for this particular problem.