/// <summary> Merges two sets of Instances together. The resulting set will have /// all the attributes of the first set plus all the attributes of the /// second set. The number of instances in both sets must be the same. /// /// </summary> /// <param name="first">the first set of Instances /// </param> /// <param name="second">the second set of Instances /// </param> /// <returns> the merged set of Instances /// </returns> /// <exception cref="IllegalArgumentException">if the datasets are not the same size /// </exception> public static Instances mergeInstances(Instances first, Instances second) { if (first.numInstances() != second.numInstances()) { throw new System.ArgumentException("Instance sets must be of the same size"); } // Create the vector of merged attributes FastVector newAttributes = new FastVector(); for (int i = 0; i < first.numAttributes(); i++) { newAttributes.addElement(first.attribute(i)); } for (int i = 0; i < second.numAttributes(); i++) { newAttributes.addElement(second.attribute(i)); } // Create the set of Instances Instances merged = new Instances(first.relationName() + '_' + second.relationName(), newAttributes, first.numInstances()); // Merge each instance for (int i = 0; i < first.numInstances(); i++) { merged.add(first.instance(i).mergeInstance(second.instance(i))); } return merged; }