(See the best response by Kaiochao.)
Problem description:
Is there any way to control how "fast" an icon state animation is played?

For instance, if I have a walk animation that has 4 frames with 1 delay each. is there a way to slow the animation down so that each delay is 2? (by using code, not by editing it)
There are feature requests for this already: search?q=site%3abyond%2ecom+animation+speed

An existing solution would be to make your own custom animator and split your animations into separate single-frame states (multi-directional should still work). You can use animate() like so to flip through them:
// For an icon with a set of icon states "move 1", "move 2", ..., "move [frames]"
// to play each frame with a delay of [delay] on loop:
var delay = 1 // or 2 for slower animation
animate(src, loop = -1, time = 0)
for(var/frame in 1 to frames)
animate(time = delay, icon_state = "move [frame]")
In response to Kaiochao
So control over animation speed doesn't exist without hacking together a custom animation system? That's pretty terrible.
In response to Orange55
Best response
A lot of BYOND's built-in features are like that. Convenient until you need something better, at which point you have to use something else, usually making something new from scratch.