按行,堆栈列过滤?我知道如何根据一些条件制作子表:
dt << Row Selection( Select where( (:Stat == "mean"), Current Selection( Extend )) );
dt << Select Columns( [10, 20] );
dt2 << Subset( Output Table( "test"), Selected Rows( 1 ), Selected columns( 1 ) );
但是,现在我需要针对多个条件重复上述操作并堆叠选择,即新表将第10列作为固定列,然后我继续添加第20列,并且只有与上述条件匹配的行。 行数将始终相同。
“堆栈”命令不适用于选择,因此不确定其他哪些命令可以做到这一点吗?
脚本编写回复:按行,堆栈列过滤吗?这是使用Stack平台时删除所选行的简便方法的示例
names default to here(1);
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Row Selection( Select where( (:Sex=="F"), Current Selection( "Extend" )) );
// Stack data table
dtStack = dt << Stack(
columns( :height, :weight ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << delete rows;
回复:按行,堆栈列过滤吗?(错误地接受作为解决方案)
谢谢,但我不想删除选定的行。 我可以解决这个问题,但是在使用Stack时如何追加选择呢?回复:按行,堆栈列过滤吗?这是我认为可以完成的方式(但不起作用):
my_list = {"F0","F1"};
stackcols = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( stackcols, dt )
);
dt2 << Subset( Output Table( "aa"), Selected Rows( 1 ), Selected columns( 1 ) );基本上,我根据“ Freq”列过滤活动表,首先按值“ F0”过滤,然后按“ F1”过滤。 这位于第19列。 我将该选择添加到名为“ stackcols”的选择列表中。 因此,在循环之后,我希望它是一个两列宽的列表。 然后,我要用它制成一张桌子(称为“ aa”)。 但这是行不通的。
回复:按行,堆栈列过滤吗?啊.....关于删除选定的行,您是正确的。但是要删除未选中的,只需使用
dtStack << Invert Row Selection;
然后删除行。
要附加多个独立的堆叠数据表,只需:
- 在开始重复的Stack实例之前,创建一个空的Base数据表,该表最终将所有堆叠的表连接到该表
dtBase = New Table("Base");
- 然后针对您创建的每个堆叠表,
- 从堆叠数据表中删除不需要的行
- 将堆叠表连接到基本表
dtBase << Concatenate( dtStacked );
- 删除堆积表
Close( dtStacked, nosave );
回复:按行,堆栈列过滤吗?谢谢,但是没有用:
dt = current data table();
my_list = {"F0","F1"};
dtBase = New Table("Base");
dtStacked = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( dtStacked, dt );
dtBase << Concatenate( dtStacked );
Close( dtStacked, nosave );
);dtBase为空。
回复:按行过滤,堆叠列?插入()不会做你认为它会做的事情。
在您的代码中,它会反复将数据表引用 dt 插入到 dtstacked 列表中。 它与选定的行或列没有任何关系。
您需要使用 Subset() 创建所选行和列的新数据表,并将该引用插入到 dtstacked 中,然后将它们连接起来。
不过,这似乎没有必要。 由于您只是在最后每次通过循环扩展选择,因此您可以执行所选行和列的子集,并获得与连接数据表相同的结果。