删除几乎空的分类列有人能帮帮我吗?
从数据库我需要删除具有一定百分比缺失字符的分类列,同时我想删除具有停滞值百分比的数字列(不必100%)。
谢谢。 菲利斯
Re:删除几乎空的分类列很好,谢谢。
菲利斯
Re:删除几乎空的分类列是的,一切都取决于你如何设置它。第一项检查是在每列中找到最常见的值,并确定它是高于还是低于阈值百分比。不幸的是,缺失值不是值,因此它不是最常见的。这就是为什么它不适用于数字列。它确实适用于字符列b / c“”缺少和空字符串值。
希望有助于解释事情。
如果您想要更多粒度,只需使用不同的策略运行具有不同百分比的多个循环。Re:删除几乎空的分类列您好msharp感谢您的回复。我们问另一个问题。百分比变量对分类列和数列都有效吗?如果是,我可以为失踪和停滞案件提供两种不同的价值吗?
对不起,也许是愚蠢的问题,但我不是jsl语言的专家。
菲利斯
Re:删除几乎空的分类列只需结合策略。 就像是:
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)<<GETASMATRIX> numRows * percent/100,
insert into(delcols, i);
,
if(Col N Missing(column(dt,i)) > numRows * percent/100,
insert into(delcols, i);
);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols)); </GETASMATRIX>Re:删除几乎空的分类列你好
我在下面的第二个表上尝试了你的脚本,结果就在这里。
如你所见,它能够删除几乎所有所需的列,但第二个(col2)没有。 我该怎么做才能删除它?
谢谢菲利斯


Re:删除几乎空的分类列您可以使用之前发布的方法但使用列模式的方法可以使用小于100%的方法
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)<<getasmatrix),mode(column(dt,i)<<getasmatrix))) > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
Re:删除几乎空的分类列我想你也在寻找这样的东西:
如果所有数据只有一个值,那么将删除数字列。
Names Default To Here( 1 );
dt = Current Data Table();
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
try(summarize(dt, max = max(col), min = min(col));
if((max == min) | (ismissing(max)),
insertinto(delcols, i);
)
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));Re:删除几乎空的分类列另一种方法,我相信稍微强一些。
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
nmissing = col N missing(col);
if(nmissing > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
Re:删除几乎空的分类列这是一个快速而脏的脚本,可以删除少于指定百分比数据的列
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
colList = dt << get column names( character, string );
NumRows = N Rows( dt );
For( i = N Items( colList ), i >= 1, i--,
If( Col Number( Column( dt, i ) ) / NumRows * 100 < percent,
dt << delete columns( colList[i] )
)
);