Entfernen Sie fast leere kategoriale SpaltenKann mir jemand helfen?
Aus einer Datenbank muss ich kategoriale Spalten mit einem bestimmten Prozentsatz fehlender Zeichen entfernen und gleichzeitig möchte ich die numerischen Spalten mit einem Prozentsatz stagnierender Werte entfernen (nicht unbedingt 100 %).
Danke. Felice
Betreff: Fast leere kategoriale Spalten entfernenPerfekt danke.
Glücklich
Betreff: Fast leere kategoriale Spalten entfernenJa, es hängt alles davon ab, wie Sie es einrichten. Die erste Prüfung besteht darin, den häufigsten Wert in jeder Spalte zu finden und festzustellen, ob er über oder unter dem Schwellenwertprozentsatz liegt. Leider ist ein fehlender Wert kein Wert und kann daher nicht der häufigste sein. Deshalb funktioniert es bei den numerischen Spalten nicht. Es funktioniert bei den Zeichenspalten, da/c „“ sowohl fehlt als auch ein leerer Zeichenfolgenwert ist.
Ich hoffe, das hilft, die Dinge zu erklären.
Wenn Sie mehr Granularität wünschen, führen Sie einfach mehrere Schleifen mit unterschiedlichen Prozentsätzen und unterschiedlichen Strategien aus.Betreff: Fast leere kategoriale Spalten entfernenHallo msharp, danke für deine Antwort. Stellen wir noch eine Frage. Funktioniert die Prozentvariable sowohl für kategoriale als auch für numerische Spalten? Wenn ja, kann ich zwei unterschiedliche Werte für fehlende und stagnierende Fälle festlegen?
Entschuldigung für die vielleicht dumme Frage, aber ich bin kein Experte in der JSL-Sprache.
Glücklich
Betreff: Fast leere kategoriale Spalten entfernenKombinieren Sie einfach die Strategien. Etwas wie:
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 * Prozent/100, einfügen in(delcols, i); , if(Spalte N Missing(Spalte(dt,i)) > numRows * Prozent/100, einfügen in(delcols, i); ); ); ); if(nitems(delcols) > 0, dt << delete columns(delcols)); </GETASMATRIX>Betreff: Fast leere kategoriale Spalten entfernenHallo
Ich habe Ihr Skript in der zweiten Tabelle unten ausprobiert und das Ergebnis ist hier.
Wie Sie sehen, konnten fast alle gewünschten Spalten entfernt werden, die zweite (col2) jedoch nicht. Wie kann ich es auch entfernen?
Danke Felice


Betreff: Fast leere kategoriale Spalten entfernenMöglicherweise können Sie die Methode verwenden, die Sie zuvor gepostet haben, allerdings mit dem Modus der Spalte für etwas weniger als 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 * Prozent/100, einfügen in(delcols, i); ); ); if(nitems(delcols) > 0, dt << delete columns(delcols));
Betreff: Fast leere kategoriale Spalten entfernenIch denke, Sie suchen auch nach so etwas:
Dadurch wird eine numerische Spalte gelöscht, wenn alle Daten nur einen Wert haben.
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));Betreff: Fast leere kategoriale Spalten entfernenEine andere Methode, glaube ich, etwas robuster.
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));
Betreff: Fast leere kategoriale Spalten entfernenHier ist ein schnelles und schmutziges Skript, das Spalten mit weniger als einem angegebenen Prozentsatz an Daten entfernt
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] )
)
);