how to I replace numeric values with a string in an R dataframe?
From the documentation of is.numeric: 


  The default method for is.numeric returns TRUE if its argument is of mode "numeric" (type > "double" or type "integer") and not a factor, and FALSE otherwise.


So for a vector, is.numeric returns a single TRUE, it doesn't test each element as you might expect. 

is.numeric(c(5, 4, 3))
[1] TRUE

is.numeric(c(5, 4, NA))
[1] TRUE


That's why either all or none of the values are changed to NOTMISSING.

@eg-r's fix is correct.  Here's a tidyverse way to accomplish the same.

&gt; df&lt;-tibble(myCol=c(5, 4, NA))
&gt; df
# A tibble: 3 x 1
  myCol
  &lt;dbl&gt;
1     5
2     4
3    NA
&gt; df %&gt;% mutate(myCol = ifelse(is.na(myCol), myCol, "NOTMISSING"))
# A tibble: 3 x 1
       myCol
       &lt;chr&gt;
1 NOTMISSING
2 NOTMISSING
3       &lt;NA&gt;