rimuovi colonne categoriche quasi vuoteQualcuno può aiutarmi?
Da un database ho bisogno di rimuovere colonne categoriali con una certa percentuale di carattere mancante e allo stesso tempo vorrei rimuovere le colonne numeriche con una percentuale di valori stagnanti (non necessario 100%).
Grazie. Felice
Ri: rimuovere colonne categoriche quasi vuotePerfetto grazie.
Felice
Ri: rimuovere colonne categoriche quasi vuoteSì, tutto dipende da come lo hai impostato. Il primo controllo è trovare il valore più comune in ogni colonna e determina se è superiore o inferiore alla percentuale di soglia. Sfortunatamente, un valore mancante non è un valore, quindi non può essere il più comune. Ecco perché non funziona sulle colonne numeriche. Funziona sulle colonne Carattere b / c "" mancano entrambe e un valore di stringa vuoto.
Spero che aiuti a spiegare le cose.
Se vuoi più granularità, esegui più loop con percentuali diverse usando strategie diverse.Ri: rimuovere colonne categoriche quasi vuoteCiao msharp grazie per la tua risposta. Facciamo un'altra domanda. La variabile percentuale funziona sia su colonne categoriali che numeriche? Se sì, posso avere due valori diversi per i casi mancanti e stagnanti?
Ci scusiamo per la domanda forse stupida ma non sono esperto in linguaggio jsl.
Felice
Ri: rimuovere colonne categoriche quasi vuoteBasta combinare le strategie. Qualcosa di simile a:
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>Ri: rimuovere colonne categoriche quasi vuoteCiao
Ho provato il tuo script nella seconda tabella qui sotto e il risultato è qui.
Come puoi vedere, è stato in grado di rimuovere quasi tutte le colonne desiderate, ma la seconda (col2) no. Come posso fare per rimuoverlo anche tu?
Grazie Felice


Ri: rimuovere colonne categoriche quasi vuotepotresti essere in grado di utilizzare il metodo che hai postato prima ma con la modalità della colonna per qualcosa di meno del 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));
Ri: rimuovere colonne categoriche quasi vuotePenso che tu stia cercando qualcosa di simile a questo:
Che cancellerà una colonna numerica se tutti i dati sono solo un valore.
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));Ri: rimuovere colonne categoriche quasi vuoteUn altro metodo, credo leggermente più robusto.
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));
Ri: rimuovere colonne categoriche quasi vuoteEcco uno script veloce e sporco che elimina le colonne con meno di una percentuale specifica di dati
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] )
)
);