删除几乎空的分类列有人可以帮助我吗?
我需要从数据库中删除具有一定百分比的缺失字符的分类列,同时我想删除具有一定百分比的停滞值(不一定是 100%)的数字列。
谢谢。菲利斯
回复:删除几乎空的分类列很好,谢谢。
快乐的
回复:删除几乎空的分类列是的,这完全取决于你如何设置。第一个检查是查找每列中最常见的值,并确定它是否高于或低于阈值百分比。不幸的是,缺失值不是一个值,因此它不可能是最常见的。这就是为什么它不适用于数字列。它确实适用于字符列 b/c "" 缺失且为空字符串值。
希望这有助于解释事情。
如果您想要更精细的粒度,只需使用不同的策略以不同的百分比运行多个循环即可。回复:删除几乎空的分类列嗨,msharp,感谢您的回复。让我们问另一个问题。百分比变量适用于分类列和数字列吗?如果是的话,我可以对失踪案件和停滞案件有两个不同的价值吗?
抱歉,我的问题可能很愚蠢,但我不是 jsl 语言专家。
快乐的
回复:删除几乎空的分类列只需结合策略即可。就像是:
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 * 百分比/100,插入(delcols, i); , if(Col N Missing(column(dt,i)) > numRows *%/100, insert into(delcols, i); ); ); ); if(nitems(delcols) > 0, dt << 删除列(delcols)); </GETASMATRIX>回复:删除几乎空的分类列你好
我在下面的第二个表中尝试了您的脚本,结果在这里。
正如您所看到的,它能够删除几乎所有所需的列,但第二个列 (col2) 则不能。我该怎么做才能将其也删除?
谢谢菲利斯


回复:删除几乎空的分类列您也许可以使用之前发布的方法,但使用列的模式来处理小于 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)< numRows * 百分比/100,插入(delcols, i); ); ); if(nitems(delcols) > 0, dt << 删除列(delcols));
回复:删除几乎空的分类列我想你也在寻找这样的东西:
如果所有数据只有一个值,这将删除数字列。
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));回复:删除几乎空的分类列另一种方法,我相信稍微更稳健一些。
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));
回复:删除几乎空的分类列这是一个快速但肮脏的脚本,可以删除数据少于指定百分比的列
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] )
)
);