如何选择每列中最高的三个单元格值?对于包含单词的每一列,比如“预测”,我想在列表中提取大于 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 语句)可能会起到作用。