操作大型數據集(腳本)你好,
我想操作一個大型 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 秒 vs. 0.1722 秒 1,000 和 6.64 秒 vs. 0.543 秒 10,000 秒)
有趣的是預先分配表行然後直接寫入表。 那麼會有很大的不同嗎?
回复:操縱大型數據集(腳本)您好,謝謝 Don 和 Sam。 這 2 種解決方案有效,但正如 Don 所說,對於我的大型數據集,矩陣的使用速度更快。 伊曼紐爾