我有几个ARFF文件。 我想顺序读取它们,并创建一个大的数据集。 Instances.add(实例研究所)不字符串值添加到实例,因此试图setDataset()......但即使这样失败。 有没有一种方式来完成对字符串的直觉正确的事情吗?
ArffLoader arffLoader = new ArffLoader();
arffLoader.setFile(new File(fName));
Instances newData = arffLoader.getDataSet();
for (int i = 0; i < newData.numInstances(); i++) {
Instance one = newData.instance(i);
one.setDataset(data);
data.add(one);
}
这是从邮件列表。 我之前救了它
如何合并两个数据文件a.arff和b.arff到一个数据表?
要看什么合并你正在谈论。 你只是想追加第二个文件(都具有相同的属性),或者你想添加的合并属性(都具有相同数量的实例)?
In the first case ("append"):
java weka.core.Instances append filename1 filename2 > output-file
and the latter case ("merge"):
java weka.core.Instances merge filename1 filename2 > output-file
以下是相关的Javadoc:http://weka.sourceforge.net/doc.dev/weka/core/Instances.html#main(java.lang.String中[])
使用mergeInstances合并两个数据集。
public static Instances mergeInstances(Instances first,
Instances second)
您的代码会是这样的下面。 对于相同的实例编号。
ArffLoader arffLoader = new ArffLoader();
arffLoader.setFile(new File(fName1));
Instances newData1 = arffLoader.getDataSet();
arffLoader.setFile(new File(fName2));
Instances newData2 = arffLoader.getDataSet();
Instances mergedData = Instances.mergeInstances( newData1 ,newData2);
您的代码会是这样的下面。 对于同一属性的数字。 我没有看到任何秧鸡Java方法。 如果你读代码中有类似下面。
// Instances.java
// public static void main(String[] args) {
// read two files, append them and print result to stdout
else if ((args.length == 3) && (args[0].toLowerCase().equals("append"))) {
DataSource source1 = new DataSource(args[1]);
DataSource source2 = new DataSource(args[2]);
String msg = source1.getStructure().equalHeadersMsg(source2.getStructure());
if (msg != null)
throw new Exception("The two datasets have different headers:\n" + msg);
Instances structure = source1.getStructure();
System.out.println(source1.getStructure());
while (source1.hasMoreElements(structure))
System.out.println(source1.nextElement(structure));
structure = source2.getStructure();
while (source2.hasMoreElements(structure))
System.out.println(source2.nextElement(structure));
}