Nachdem ich mehrere wichtige Spalten gruppiert habe, möchte ich die restlichen Spalten im „Dachboden“ ausblenden.
Wie erhalte ich eine Liste aller nicht gruppierten Spalten?
Liste aller Spalten abrufen, Liste der gruppierten Spalten abrufen und gruppierte Spalten aus der Spaltenliste entfernen
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Cities.jmp");
dt << group columns("xy", {:X, :y});
dt << group columns("pollutants", :Ozone :: :Lead);
collist = dt << Get Column Names("String");
grouped_list = {};
For Each({groupname}, dt << get column groups names,
c = dt << get column group(groupname);
groupcols = Transform Each({cr}, c, cr << get name);
Insert Into(grouped_list, groupcols);
);
nongrouped = Set Difference(collist, grouped_list);
For Each({colname}, nongrouped,
Column(dt, colname) << Hide(1);
);
wait(0);
Der Umweg über die Zeichenketten ist sinnvoll : )
Ich frage mich, warum das notwendig ist ...
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dd= dt << group columns("xy", {:X, :y});
ee= dt << group columns("pollutants", :Ozone :: :Lead);
Type(ee)
collist = dt << Get Column Names();
grouped_list = {};
groups= dt << get column groups names;
For Each({groupname},groups,
groupcols= dt << get column group(groupname);
Insert Into(grouped_list, groupcols);
);
Show(grouped_list); // list of names with ":" {:OZONE, :CO, :SO2, :NO, :PM10, :Lead, :X, :Y};
show(collist);// list of names without ":" {city, Latitude, Longitude, ... }
nongrouped = Set Difference(collist, grouped_list); // ?!?! {city, CO, Latitude, Lead, Longitude, Max deg. F Jan, NO, OZONE, PM10, POP,"pop- m"n, Region, SO2, State, X, Y}
Wichtige Details:
- Der Rückgabewert von << gruppierten Spalten ist eine Zeichenkette – keine Spaltengruppe.
<< get column group returns a list of columns, not a column group
- Wichtig: Diese Spaltenliste enthält die Namen mit vorangestelltem ":"
- Vergleich: Die Funktion `getColumnNames()` gibt eine Liste der Spaltennamen ohne das führende ":" zurück.
- -> Die beiden Listen sind nicht miteinander kompatibel.
Umgehungslösungen:
convert to list of columns = Function ({myColList},
Transform each({col},myColList, Name Expr(As column(dt, col)))
);
grouped_list = convert to list of columns(grouped_list); // looks like before, but is something completely different
collist = convert to list of columns(collist); //{:city, :Latitude, :Longitude, ... }
nongrouped = Set Difference(collist, grouped_list);
Show (nongrouped) // {:city, :Latitude, :Longitude, :Max deg. F Jan, :POP, :"pop- m"n, :Region, :State};
Wenn ich mit Spalten arbeite, ist mir nur wichtig, sie alle in Zeichenketten umzuwandeln, da dies viele Probleme vermeidet. Meiner Meinung nach gibt es praktisch keinen Grund, Spalten von Anfang an anders als als Zeichenketten zu behandeln, da man jederzeit von Zeichenketten in andere Spaltenformate konvertieren kann. Und falls es doch einen Grund gibt, mit einem anderen Datentyp als einer Zeichenkette zu beginnen, lohnt es sich meiner Erfahrung nach nicht.