If the first and last keyframes are identical, you can add a simple loopOut() expression to any position, rotation, or scale animation.
You can also animate one cycle of anything, trim the layer so that the first and last frame are identical, and then pre-compose that layer or group of layers by making sure to trim the new comp to the length of the layer(s). Then you apply Time Remapping to the nested comp, go to the end of the layer, which is one frame before the last Time Remapping keyframe so the layer is visible, set a new TR keyframe, then move to the last TR keyframe and delete it. Then, you add a simple loopOut() expression, and you can extend the layer as long as you want, ending up with a perfect looping action. Time remapping to create a perfect loop gives you an easy way to Pre-compose that layer again, add Time Remapping again, and then control the speed of the repeating action without ever ending up with blended or duplicated frames.
I've made these suggestions so many times I should do a quick tutorial that shows how it is done.
... View more