<!-- language-all: lang-C++ -->

    void loop() { 
      Serial.println("NEW-------------");
      int x;
      int y[100];
      for(int i = 0; i<100; i++){ 
        x=RX.read(); 
        y[i] = x;
      } 
    ...
    }

You are reading data without checking if there is any data there. That's like watching the TV without checking if it is turned on. Of course you get weird data.

---

    SoftwareSerial RX(0,1); //(rx pin, tx pin)

Pins 0 and 1 are used by HardwareSerial. Why are you using them for SoftwareSerial?

---

    SoftwareSerial RX(0,1); //(rx pin, tx pin)
    ...

      Serial.begin(9600); 
      RX.begin(1200); 

So you initialized HardwareSerial, which now controls pins 0 and 1.

Then you try to initialize SoftwareSerial on those **same** pins! Would you mind explaining why?

Whatever your explanation is, it won't work.


---

> I've added in the changes you mentioned, but the data still seems to be skewed.

You've changed things, for sure:

     for(int i = 0; i<100; i++){ 
        if(RX.available())
          x=RX.read(); 
    
        y[i] = x;
        }

Let's see. In a loop of 100 iterations you see if anything is available (and if so, put it into `x`).

Then, regardless of **whether or not you got anything** you now assign `x` to `y[i]`. So, most of the time, `y[i]` will have garbage in it.

>  the data still seems to be skewed

Not surprised. Do it differently. Only write to the array if you have data. In fact you may want a complete rework. Read this:

[How to read serial without blocking](http://www.gammon.com.au/serial)