Rinominare le colonne con RegexCiao,
Ho un elenco di un numero enorme di colonne da impilare con nome in formato colonna di TEST_BOUROUGH_GENDER, come mostrato di seguito. Ora il BOUROUGH può mancare dal nome della colonna e che imples il valore dalla colonna è da tutti i BOUROUGHs (cioè NYC). Ho impilato tutti i nomi delle colonne TEST_BOUROUGH_GENDER e poi ho creato nuove colonne denominate test, posizione e sesso (vedi sotto). Quando mi imbatto nel caso di una colonna che manca un nome BOUROUGH vorrei aggiungere NYC al nome di quella colonna. Preferirei anche se questo potesse essere fatto con espressioni regolari. Ogni pensiero o input è molto apprezzato.
nome del formato della colonna : CALC1_BROOKLYN_M, CALC2_QUEENS_F, CALC2_M, ..
ref = Current Data Table ();
pila statica << pila di riferimento (Colonna Etichetta di origine ("Etichetta"), Colonna di dati in pila ("Dati"));
stat stack << New Column ("test", Formula (Right (: Label, 5)));
stat stack << Nuova colonna ("posizione", formula (Regex (: etichetta, "_ (. *) _", "\ 1")));
stat stack << Nuova colonna ("gender", Formula (Right (: Label, 1)))
Ri: Rinomina colonne con RegexQuesto risolve tutto e ora funziona! Grazie per tutto il supporto. Un ultimo miglioramento che vedo è che invece di avere una lunga stringa di concatenazione con la funzione parola c'è un modo per restituire tutto prima del delimitatore? Quindi, ad esempio, c'è un modo per scriverlo come || "_ALL_" || Word (5, cname, "_"). Quindi in pratica voglio la stringa del nome della colonna prima del 4 ° delimitatore.
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
<BR />
Ri: Rinomina colonne con RegexSe capisco cosa vuoi, puoi usare una clausola OR per ottenere quello che vuoi
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,"_")
)
)
);Ri: Rinomina colonne con RegexQuesto è quello che voglio! Tuttavia quando provo a inserire questo nel mio script si blocca. I valori che ho usato nel mio esempio (TEST_BOUROUGH_GENDER) non sono reali a causa di problemi di IP, ma mearly sono usati come esempio. Inoltre, dopo l'ultimo delimitatore "_", la colonna avvierà M o P. C'è un modo con startswith function per includere due caratteri separati con cui può iniziare?
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,"_")
)
)
);Ri: Rinomina colonne con RegexQuesto dovrebbe funzionare fino a quando Bourough non contiene un trattino basso.
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)));Ri: Rinomina colonne con RegexQuesta soluzione sulla modifica dei nomi non utilizza espressioni regolari, ma è una parte di codice molto semplice:
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], "_" )
)
)
);