如何删除数据集中所有列中缺少数据的行?抱歉,我的问题有多基本,我才刚开始使用JMP。
我有一个庞大的数据集(14列x 20,000行),我试图编写一个脚本,该脚本将识别和删除针对特定范围的列(列4-14)不具有0或1的所有行。 该数据集来自更大的数据集,因此我的子集中有些行完全为空。 这是我希望做的一个例子:
- - - - -
0 0 1 - 0
- - - - -
1 - - - -
变成:
0 0 1 - 0
1 - - - -
我已经开始编写代码,但是我遇到了麻烦–我不确定在For Each行之后该怎么做。 我希望此脚本一次只能查看一行,并且如果特定的单元格没有0或1,那么它将在下一列中查找0或1,如果到了末尾行中没有0或1的行,那么它将删除整个行。 到目前为止,这是我的代码:
dt=Open("File Name")
colnames = dt << get column names( numeric,string );
For( i = 4, i <= N Items( colnames ), i++,
For Each Row(If(:colnames != 0 | :colnames != 1), Continue()
)
);我在考虑使用
<< Delete Rows
,这是我在该论坛上其他一些问题上看到的。 如果使用脚本过于复杂,是否有更好的方法呢?
脚本编写回复:如何删除数据集中所有列中缺少数据的行?这需要是脚本吗?
如果仅找到缺少这些特定单元格的一行,请选择缺少的单元格。
现在转到“行”菜单,然后选择“行选择”>“选择匹配的单元格”。
现在,将选择那些列中缺少数据的每一行。 选择“行”>“删除行”。
回复:如何删除数据集中所有列中缺少数据的行?我认为您需要查看Missing Data Pattern平台:
表格=>缺少数据模式
从您的描述来看,听起来像满足您的需求。它将分析您指定的列,然后从产生的数据表中选择所有缺少值的列,然后将其删除。
回复:如何删除数据集中所有列中缺少数据的行?或者,如果您要编写脚本,这是我的建议:
dt << New Column("Selected", Character, Nominal, Formula(
If(Is Missing(:Column4) | Is Missing(:Column5)|...until column14,
"Yes",
"No"
)
));
dt << Select Where(:Selected == "Yes");
dt << Delete Rows;回复:如何删除数据集中所有列中缺少数据的行?该脚本将处理您的请求。 在其他答复中,它并不是唯一的。
Names Default to Here( 1 );
// get reference to target data table
dt = Current Data Table();
// get all the columns for missing value check
cols = dt << Get Column Names;
// obtain missing value patterns
missing = Current Data Table() << Missing Data Pattern(
Columns( Eval( cols ) ),
Output Table( "Missing Data Pattern" )
);
// make character string representing missing values in all columns
n missing = N Items( cols );
all missing = Repeat( "1", n missing );
// find the row of patterns where all columns are missing.
missing << Select Where( :Patterns == all missing );
// delete the linked rows in the original table
dt << Delete Rows;
// clean up
Close( missing, No Save );
回复:如何删除数据集中所有列中缺少数据的行?如先前的答复所示,在JMP中通常有许多方法可以执行任务。
如果所有4至14列都是数字,则此脚本还应仅删除缺少值的行。
dt = Current Data Table();
dt << Delete Rows(Loc(Is Missing(V Mean(dt[0, 4 :: 14]`))));