操作大型数据集(脚本)你好,
我想操作一个大型 GC-MS 数据集(4800 万行),但我陷入了数据操作的中间步骤。
我想通过脚本从此处附加的中间表 Num-Example.jmp 创建一个新表(它是我的 340 000 行中间表的 14 行的子集 = 应该导致最终表 4800 万的条件行=条件和数据)。
对于这个子集,我需要自动(通过脚本)创建一个包含 2119 行的新表(这对应于 Num-Example.jmp 中 Cumulative[A] 列的第 14 行),其中的列“:ID#”填充了 ID# = “1”在前 131 行中,然后 ID# = “2”在接下来的 150 行中,依此类推。
ID# = "1" 和 131 来自 Num-Example.jmp 的第 1 行中的信息(“ID#”列表示 ID#,“:A”列表示要在新表中创建的行数)。
ID# = "2" 和 150 来自 Num-Example.jmp 的第 2 行中的信息。
依此类推,直到最后一行 = 14 (ID# = 14)。
谢谢您的帮助。
伊曼纽尔
回复:操作大型数据集(脚本)鉴于数据集的大小,我会避免将任何内容放入数据表中,直到最后。 尽可能多地使用矩阵。 像这样的东西可能会起作用:
Names Default to Here(1);
mainTbl = Current Data Table();
idCol = Column(mainTbl,"A");
idNumCol = Column(mainTbl,"ID#");
ids = idCol << Get Values;
idNums = idNumCol << Get Values;
firstVals = [1] |/ (Cumulative Sum(ids)+1)[1::(N Row(ids)-1)];
lastVals = Cumulative Sum(ids);
idMat = J(Sum(ids),1,0);
For Each({idVal,i},ids,
idMat[firstVals[i]::lastVals[i]] = Repeat(idNums[i],idVal)
);
回复:操作大型数据集(脚本)这似乎只使用数据表才能很好地工作
names default to here(1);
dt=current data table();
ca=column(dt,"A");
cid=column(dt,"id#");
rowranges=column(dt,"Cumulative [A]")<< get values;
rowranges=[0] |/ rowranges;
dtnew=new table();
cidnew=dtnew << new column("id#");
for(ii=1, ii<=n rows(dt), ii++,
dtnew << add rows(ca[ii], at end);
cidnew[rowranges[ii]::rowranges[ii+1] ]=cid[ii];
);回复:操作大型数据集(脚本)我会小心这种方法。 除非输入表很小,否则它会很慢。我用 1000 行和 10,000 行的输入表快速浏览了这两种方法。 速度差异分别为 ~4X 和 ~12X(0.6958 秒对 1,000 和 6.64 秒的 0.1722 秒对 10,000 的 0.543 秒)
有趣的是预先分配表行然后直接写入表。 那么会有很大的不同吗?
回复:操纵大型数据集(脚本)您好,谢谢 Don 和 Sam。 这 2 种解决方案有效,但正如 Don 所说,对于我的大型数据集,矩阵的使用速度更快。 伊曼纽尔