Benennen Sie Spalten mit Regex umHallo,
Ich habe eine Liste mit einer großen Anzahl von Spalten zum Stapeln, die den Spaltenformatnamen TEST_BOUROUGH_GENDER haben, wie unten gezeigt. Jetzt kann der BOUROUGH im Spaltennamen fehlen und das bedeutet, dass der Wert aus der Spalte von allen BOUROUGHs (dh NYC) stammt. Ich stapele alle TEST_BOUROUGH_GENDER-Spaltennamen und erstelle dann neue Spalten mit den Namen test, location und gender (siehe unten). Wenn ich auf den Fall einer Spalte stoße, der ein BOUROUGH-Name fehlt, möchte ich NYC zu diesem Spaltennamen hinzufügen. Ich würde es auch vorziehen, wenn dies mit regulären Ausdrücken möglich wäre. Alle Gedanken oder Eingaben werden sehr geschätzt.
Name des Spaltenformats : CALC1_BROOKLYN_M, CALC2_QUEENS_F, CALC2_M, ..
ref = Aktuelle Datentabelle ();
stat stack << ref stack(Source Label Column("Label"), Stacked Data Column("Data"));
stat stack << New Column("test", Formula(Right( :Label, 5 )));
Statistikstapel << New Column("location", Formula(Regex( :Label, "_(.*)_", "\1" )));
Statistikstapel << New Column("gender", Formula(Right( :Label, 1)))
Betreff: Spalten mit Regex umbenennenDas behebt alles und jetzt funktioniert es! Danke für all die Unterstützung. Eine letzte Verbesserung, die ich sehe, ist, dass es statt einer langen Verkettungskette mit der Wortfunktion eine Möglichkeit gibt, alles vor dem Trennzeichen zurückzugeben? Gibt es zum Beispiel eine Möglichkeit, es als || zu schreiben "_ALL_" || Word(5, cname, "_"). Also im Grunde möchte ich Spaltennamen-String vor dem 4. Trennzeichen.
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
<BR />
Betreff: Spalten mit Regex umbenennenWenn ich verstehe, was Sie wollen, können Sie eine ODER-Klausel verwenden, um zu bekommen, was Sie wollen
allColNames = dt << getcolumnnames;
pulledCols = {};
for(i = 1, i <= N items(allColNames), i++,
cname = Column(allColNames[i]) << get Name;
if(startswith(Word(5,cname , "_"),"M") | startswith(Word(5,cname , "_"),"P"),
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
)
)
);Betreff: Spalten mit Regex umbenennenDas ist was ich will! Wenn ich jedoch versuche, dies in mein Skript einzufügen, stürzt es ab. Die Werte, die ich in meinem Beispiel verwendet habe (TEST_BOUROUGH_GENDER), sind aufgrund von IP-Problemen nicht real, werden aber nur als Beispiel verwendet. Auch nach dem letzten Trennzeichen "_" beginnt die Spalte entweder mit M oder P. Gibt es eine Möglichkeit, mit der startswith-Funktion zwei separate Zeichen einzuschließen, mit denen sie beginnen kann?
allColNames = dt << getcolumnnames;
pulledCols = {};
Ncols = N items(allColNames);
for(i = 1, i <= Ncols, i++,
cname = Column(allColNames[i]) << get Name;
if(startswith(Word(5,cname , "_"),"M"),
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
)
),
if(startswith(Word(5,cname , "_"),"P"),
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
)
)
);Betreff: Spalten mit Regex umbenennenDies sollte funktionieren, solange Bourough keinen Unterstrich enthält.
dt = New Table("test",
Add Rows(3),
New Column("Label", Character, "Nominal", Set Selected, Set Values({"CALC1_BROOKLYN_M", "CALC2_QUEENS_F", "CALC2_M"}))
);
dt << New Column("test", Formula(Left(:Label, 5)));
dt << New Column("location", Formula(If(Is Missing(Regex(:Label, "_(.*)_")), "NYC", Regex(:Label, "_(.*)_", "\1"))));
dt << New Column("gender", Formula(Right(:Label, 1)));Betreff: Spalten mit Regex umbenennenDiese Lösung zum Ändern der Namen verwendet keine regulären Ausdrücke, aber es ist ein sehr einfacher Code:
Names Default To Here( 2 );
dt = Current Data Table();
colNamesList = dt << get column names( string );
For( i = 1, i <= N Items( colNamesList ), i++,
If( Word( 3, colNamesList[i], "_" ) == "",
Column( colNamesList[i] ) << set name(
Word( 1, colNamesList[i], "_" ) || "_NYC_" || Word( 2, colNamesList[i], "_" )
)
)
);