Entfernen Sie fast leere kategoriale SpaltenJemand kann mir helfen?
Aus einer Datenbank muss ich kategoriale Spalten mit einem bestimmten Prozentsatz an fehlenden Zeichen entfernen und gleichzeitig möchte ich die numerischen Spalten mit einem Prozentsatz an stagnierenden Werten (nicht notwendig 100%) entfernen.
Vielen Dank.Felice
Betreff: Entfernen Sie fast leere kategorische SpaltenPerfekt danke.
Felice
Betreff: Entfernen Sie fast leere kategorische SpaltenJa, 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, also kann es nicht der häufigste sein. Deshalb funktioniert es bei den numerischen Spalten nicht. Es funktioniert bei den Zeichenspalten b/c "" fehlt und ist ein leerer Zeichenfolgenwert.
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 verschiedenen Strategien aus.Betreff: Entfernen Sie fast leere kategorische SpaltenHallo msharp, danke für deine Antwort. Lassen Sie uns eine andere Frage stellen. Die Prozentvariable funktioniert sowohl für kategoriale als auch für numerische Spalten? Wenn ja, kann ich zwei verschiedene Werte für fehlende und stagnierende Fälle haben?
Entschuldigung für die vielleicht dumme Frage, aber ich bin kein Experte für JSL-Sprache.
Felice
Betreff: Entfernen Sie fast leere kategorische SpaltenKombinieren 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 * 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>Betreff: Entfernen Sie fast leere kategorische SpaltenHi
Ich habe Ihr Skript in der zweiten Tabelle unten ausprobiert und das Ergebnis ist hier.
Wie Sie sehen können, konnten fast alle gewünschten Spalten entfernt werden, aber die zweite (Spalte2) nicht.Wie kann ich tun, um es zu entfernen?
Danke Felice


Betreff: Entfernen Sie fast leere kategorische SpaltenMöglicherweise können Sie die zuvor gepostete Methode verwenden, jedoch 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)<<getasmatrix),mode(column(dt,i)<<getasmatrix))) > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
Betreff: Entfernen Sie fast leere kategorische SpaltenIch denke du suchst auch 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: Entfernen Sie fast leere kategorische SpaltenEine 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: Entfernen Sie fast leere kategorische SpaltenHier ist ein Quick-and-Dirty-Skript, das Spalten mit weniger als einem bestimmten 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] )
)
);