Recoding multiple columns using "long" data

For sure -- it seems like if you can gather() from wide to long you should be able to spread() back to your original wide data without adding anything. There's a good post here that helps to clarify why spread() needs unique ids to work:

Also some more discussion here about the same issue: