hrbrmstr and Jake Burkhead give you the explanation: what is not matched is not replaced.
Since the two last columns don't contain digits, they are not matched (and replaced).
A way to solve the problem is to replace all that is not a digit with nothing:
numbers<-gsub(pattern="\\D+","", c)