arp -a does not list all devices on the local network, just those that this computer happens to know the IPv4 and MAC addresses for. Each computer collects these IP <-> MAC pairs for other computers as it communicates with them, and remembers those pairs in its ARP cache; but the cache will only list other computers that this computer happens to have communicated with. The
arp -a command just lists the content of the cache.
You can fill in gaps in a computer's ARP cache by forcing communication between them. Suppose your computer is missing an entry for 10.0.0.78 (and that's on the local network). Just run
ping 10.0.0.78, your computer will go out and discover the corresponding MAC address, and if you run
arp -a again it should now have an entry for 10.0.0.78.
I don't understand the part of the question about
ping -- are you pinging computers from the router, or pinging the router from the computers? Is there a pattern to which respond and which don't? Are some of the computers running firewalls?