This might be a won't fix, but I thought I'd float the balloon anyway.
Consider:
library(dplyr)
data_frame(
id = c(1,2,3,4,5,6),
value = c(1L,2L,3L,NA,NA,NA),
group = c("A","A","A","B","B","B")
) %>%
group_by(group) %>%
mutate(value = ifelse(is.na(value),0,value))
Which fails.
Versus:
data_frame(
id = c(1,2,3,4,5,6),
value = c(1L,2L,3L,4,NA,NA),
group = c("A","A","A","B","B","B")
) %>%
mutate(value = ifelse(is.na(value),0,value)) %>%
group_by(group)
Which does not fail.
As a matter of linguistic parsing one might not expect different outcomes based on ordering. Is there a reason dplyr can't coerce the returns from the group_by operation to share in the most general common data type (as done elsewhere in R) so that both functional orders yield successful results?