Renommer les colonnes avec RegexSalut,
J'ai une liste d'un grand nombre de colonnes à empiler dont le nom de format de colonne est TEST_BOUROUGH_GENDER, comme indiqué ci-dessous. Maintenant, le BOUROUGH peut être absent du nom de la colonne et cela implique que la valeur de la colonne provient de tous les BOUROUGH (c'est-à-dire NYC). J'empile tous les noms de colonne TEST_BOUROUGH_GENDER, puis je crée de nouvelles colonnes appelées test, location et gender (voir ci-dessous). Lorsque je rencontre le cas d'une colonne à laquelle il manque un nom BOUROUGH, je voudrais ajouter NYC à ce nom de colonne. Je préférerais également que cela puisse être fait avec des expressions régulières. Toute pensée ou contribution est grandement appréciée.
nom du format de colonne : CALC1_BROOKLYN_M, CALC2_QUEENS_F, CALC2_M, ..
ref = table de données actuelle();
stat stack << ref stack(Source Label Column("Label"), Stacked Data Column("Data"));
stat stack << New Column("test", Formula(Right( :Label, 5 )));
stat stack << New Column("location", Formula(Regex( :Label, "_(.*)_", "\1" )));
pile de statistiques << Nouvelle colonne("genre", Formule(Droite( :Label, 1)))
Re : Renommer les colonnes avec RegexCela corrige tout et maintenant ça marche! Merci pour tout le soutien. Une dernière amélioration que je vois est qu'au lieu d'avoir une longue chaîne de concaténation avec le mot fonction, existe-t-il un moyen de tout renvoyer avant le délimiteur? Ainsi, par exemple, existe-t-il un moyen de l'écrire sous la forme || "_TOUS_" || Mot(5, cname, "_"). Donc, fondamentalement, je veux une chaîne de nom de colonne avant le 4ème délimiteur.
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
<BR />
Re : Renommer des colonnes avec RegexSi je comprends ce que vous voulez, vous pouvez utiliser une clause OR pour obtenir ce que vous voulez
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,"_")
)
)
);Re : Renommer les colonnes avec RegexC'est ce que je veux! Cependant, lorsque j'essaie de mettre cela dans mon script, il se bloque. Les valeurs que j'ai utilisées dans mon exemple (TEST_BOUROUGH_GENDER) ne sont pas réelles en raison de problèmes d'adresse IP, mais sont uniquement utilisées à titre d'exemple. De plus, après le dernier délimiteur "_", la colonne commencera soit par M, soit par P. Existe-t-il un moyen avec la fonction startswith d'inclure deux caractères distincts avec lesquels elle peut commencer?
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,"_")
)
)
);Re : Renommer les colonnes avec RegexCela devrait fonctionner tant que Bourough ne contient pas de trait de soulignement.
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)));Re : Renommer les colonnes avec RegexCette solution pour changer les noms n'utilise pas d'expressions régulières, mais c'est un morceau de code très simple :
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], "_" )
)
)
);