如何選擇每列中最高的三個單元格值?對於包含單詞的每一列,比如“預測”,我想在列表中提取大於 5 或大於 4.5 的前 3 個單元格值(如果我得到 3 個大於 5 的數字,那麼我不想要任何大於 4.5 的數字)。 此外,選擇距離 5 最遠的一個,並在其原始表中隱藏相應的單元格值。 例如,在下面給出的示例表中:
在預測 B 列中,我想存儲 6.6、5.3 和 5。 並隱藏 B 列中與預測 B 螺母相鄰的單元格,即單元格值 65。
我的代碼選擇其中包含字符串“Prediction”的列。
dt = Current Data Table();
a = "Prediction";
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
If( Contains( col[i], a ), )
);
如何選擇大於 5 或 4.5 的前 3 個單元格? 非常感謝 JMP 社區如此及時。
回复:每列中的前 3 個單元格值@txnelson我可以使用正則表達式來做到這一點: match = regex(colstrings, "[{,]\s*([^{,}]*Prediction[^{,}]*)[,}]", "\1");
回复:每列中的前 3 個單元格值使用 Loc() 函數而不是 Contains() 函數來指定特定字符串。
回复:每列中的前 3 個單元格值另外,有沒有辦法匹配 B 和預測 B 等列? 謝謝
回复:每列中的前 3 個單元格值好的,謝謝你的幫助。@txnelson @uday_guntupalli
回复:每列中的前 3 個單元格值一旦將單元格值設置為“缺失”,就沒有直接的方法來取消該單元格值。這就是原因@dale_lehman建議使用新列和@uday_guntupalli建議創建一個新的數據子集,然後修改該子集。
回复:每列中的前 3 個單元格值@艾米,
您始終可以對錶進行子集化,而不是嘗試包含單個單元格。
回复:每列中的前 3 個單元格值@艾米,
dt = Current Data Table();
SearchTerm = "Prediction";
ColNames = dt << Get Column Names("String");
DesRowsList = {};
for(i = 1, i <= N Cols(dt), i++,
If(Contains(ColNames[i],SearchTerm),
SR = dt << Select Where(As Column(dt,ColNames[i]) > 4.5) << Get Selected Rows;
Insert Into(DesRowsList,SR);
dt << Clear Select;
);
);這應該可以幫助您將滿足條件的行放入一個列表中。 從那裡你應該能夠在每種情況下提取前 3 名。 要回答你的問題,我不知道只排除單元格
回复:每列中的前 3 個單元格值@txnelson好吧,在將單元格的值設置為缺失值/隱藏/排除單元格的值後,我想在數據表上運行一些模型,然後決定保持這種狀態或再次將值包含到單元格中。 這可能嗎?
回复:每列中的前 3 個單元格值在 JMP 中,您不會“排除”單個單元格,而是將單元格的值設置為“缺失值”。缺失值的符號是“.”
如果列是字符數據類型,則將值設置為“”
回复:每列中的前 3 個單元格值我什至不想排除整行。 我只想排除單元格。 例如,在我發布的表格中,我希望能夠排除“B”列中與“預測 B”列中值為 6.6 的單元格相鄰的單元格。 我仍在努力弄清楚如何使用正則表達式來匹配此類字符串。 我製作了 2 個列表,一個包含列名稱,其中包含“預測”一詞,另一個列表中沒有。 如果您還可以指出您認為最適合此類表格的任何功能,我將不勝感激。 我剛剛開始使用 JSL,但我仍在為之苦苦掙扎。 先謝謝您的幫助。@uday_guntupalli
PS:這是否意味著我無法從 JSL 的列中排除單個單元格?
回复:每列中的前 3 個單元格值@艾米,
您是要排除整行還是僅排除該列的行? 我問的原因是,我很確定您可以使用以下方法排除整行:
dt << Exclude ;
但是,如果您只想排除列中的行,我認為這是不可能的。 那麼為什麼不嘗試將行號存儲到變量中然後排除這些行呢?
回复:每列中的前 3 個單元格值這是一種檢查需要從我的分析中刪除的數據的方法,因此我必須以相同的方式進行。 非常感謝所有的幫助,我真的很感激@dale_lehman
回复:每列中的前 3 個單元格值我不會編寫太多腳本,所以我會把它留給其他人來幫助您。我只會說我真的不明白在執行這些操作後要排除行的原因——創建新列並排除或設置為缺失的行似乎更好。我認為該腳本會相對簡單,我不喜歡覆蓋原始數據的想法(如果這是您的建議)。
回复:每列中的前 3 個單元格值@dale_lehman謝謝您的幫助。 我更新了腳本以選擇每列的最大值並將其保存在“val”變量中。 你知道我如何排除第一列中數字最大的單元格,執行一些操作然後排除第二列中數字最大的單元格等等嗎?
dt = Current Data Table();
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
Col1 = Column( dt, i );
If( Contains( col[i], "Prediction" ),
Show( col[i] );
val = Abs( Col Max( Col1 ) );
Show( val );
MaxRow = dt << get rows where( As Column( Col1 ) == Abs( Col Max( Col1 ) ) );
);
);
回复:每列中的前 3 個單元格值我已附上您的示例,並嘗試按照您指定的方式使用 B 列預測。我不確定這是否完全符合您的要求,但我認為它很接近。
回复:每列中的前 3 個單元格值@dale_lehman好吧,我找不到太多關於如何使用列排名功能的信息。 我可以提取一個最大值,但我仍然無法確定如何繼續前 3 名。
回复:每列中的前 3 個單元格值列排名函數(和一些 IF 語句)可能會起到作用。