选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。你好。
这是此链接中问题的后续: 已解决:从选择位置获取值 - JMP 用户社区。在本次讨论的最后(在提供的链接中),有一种 jsl 可以选择某些行并使用 show() 函数打印它们。在另一篇文章中(我丢失了它的链接),有一种方法可以使用 Select Duplicated Row() 函数选择重复的行,然后删除它们。
我的目标是选择重复的行,然后获取表中选定列的索引。例如,我想在大类表中找到年龄列的重复条目。
第二个目标是创建一个仅包含唯一行的新列,而不删除重复的行。
任何指导表示赞赏。
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit:age << Select Duplicate Rows( Match (:age, :age ) );
Group1List = (dt_limit:age[dt_limit << get selected rows]);
theCount = N Rows( dt << get selected rows);
Show( Group1List);
自动化和脚本编写基础数据分析和建模数据存取回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。谢谢@Jed_Campbell 。这很好,非常感谢!
我正在尝试将该列捕获到列表中以进行进一步操作。你能帮我吗?谢谢!
回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。添加在脚本末尾的这一行应该将该列放入列表中:
future_list = as list (dt_limit:Unique << Get Values);
回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。谢谢@Jed_Campbell 。它工作得很好。
我目前遇到的另一个问题是,如果我不是只有一列(即年龄),而是有一个列列表(即[年龄、身高、体重等])怎么办?代码会如何改变?我尝试使用列和 eval 的组合来将列表条目作为列获取。我知道下面的代码确实有效,但是我如何修改它以适用于任何列列表。会有类似 As column (ListOfTargetCol[i])[i] ); 的内容或:(ListOfTargetCol[i])[i]);意味着 jmp 将获取列表的第 i 个条目,然后获取该列(列)的第 i 个条目?我是 jsl 的新手,不确定它的结构如何。请告知如何克服这个问题。
作为参考,我使用与上面提供的代码类似的代码,并尝试添加如下内容:我也很好奇,如果它是像下面这样的字符串名称列表,它是否会有所不同。多谢!
ListOfTargetCol = { age, height, weight};
StringOfTargetCol = { "age", "height", "weight"};
... dt_limit:Unique[i] = dt_limit:( As coulmn(ListOfTargetCol[1])) [i]...
回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。您正在寻找这样的东西吗?可能有更优雅的方法来完成它,但这是一种仅使用第一个唯一行创建新列的方法。
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit << Select Duplicate Rows( Match (:age ) );
Group1List = (dt_limit << get selected rows);
theCount = N Items (Group1List);
//create a new column that has only the unique rows without deleting the duplicated row
dt_limit << Invert Row Selection;
UniqueList = dt_limit << Get Selected Rows;
dt_limit << new column ("Unique");
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。如果您不需要选择,您还可以使用公式/摘要(或许多其他选项)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;
// Option2
dt << New Column("Row", Numeric, "Continuous", Formula(Row()));
dt_summary = dt << Summary(
Group(:age),
Min(:Row),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
Column(dt_summary, 1) << Set Name("R2");
dt << Update(With(dt_summary), Match Columns(:Row = :Row));
Close(dt_summary, no save);

回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。感谢@jthi的帮助!两种解决方案都很好用,但我仍然对应该使用的语法感到困惑。
In the loop below, we have the dt:age[i] which iterates through the "age" column in the dt_limit loop. <BR />What if I want to have more than one column to iterate through.<BR /><BR /> The only solution I can find (and works with no error) is to copy past the loop for <BR />all the needed columns i.e. age, height, ..etc. It is just not efficient and will not work for a large number of columns. <BR /><BR />Any suggestions would be appreciated.
<BR />
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。我不太清楚你想做什么。你可以将更多列作为 byvars 添加到 Col Min
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;

Col 最小值(名称, )
回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。谢谢@jthi 。没错。我可以按照你上面的建议添加更多列。但是,我正在尝试概括解决方案。我试图做的是获取用户输入以评估哪些列。将它们放在列表中。然后,评估所有列。例如,用户只能选择年龄和身高。我需要代码尽可能灵活。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
TargetList = {age, sex, height};
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;回复:选择重复的行条目,保存其索引,然后创建一个不包含重复行的新列表。您可以使用表达式构建公式
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
sel_cols = {"age", "sex", "height"};
colmin_expr = Expr(Col Min(Row()));
For Each({sel_col}, sel_cols,
Insert Into(colmin_expr, Name Expr(AsColumn(dt, sel_col)))
);
Eval(Substitute(
Expr(new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == _colminformula_, :age, .)
))),
Expr(_colminformula_), Name Expr(colmin_expr)
));
dt << Run Formulas;
new_col << Delete Formula;
您还应该能够相当轻松地修改摘要版本以使用列表中的输入