package water.rapids.ast.prims.mungers; import water.fvec.Frame; import water.fvec.Vec; import water.rapids.Env; import water.rapids.ast.AstRoot; import water.rapids.vals.ValNums; import water.rapids.ast.AstPrimitive; import java.util.ArrayList; /** */ public class AstFilterNaCols extends AstPrimitive { @Override public String[] args() { return new String[]{"ary", "fraction"}; } /* (filterNACols frame frac) */ @Override public int nargs() { return 1 + 2; } @Override public String str() { return "filterNACols"; } @Override public ValNums apply(Env env, Env.StackHelp stk, AstRoot asts[]) { Frame fr = stk.track(asts[1].exec(env)).getFrame(); double frac = asts[2].exec(env).getNum(); double nrow = fr.numRows() * frac; Vec vecs[] = fr.vecs(); ArrayList<Double> idxs = new ArrayList<>(); for (double i = 0; i < fr.numCols(); i++) if (vecs[(int) i].naCnt() < nrow) idxs.add(i); double[] include_cols = new double[idxs.size()]; int i = 0; for (double d : idxs) include_cols[i++] = d; return new ValNums(include_cols); } }