使用正則表達式重命名列你好,
我有一個列表,其中包含大量要堆疊的列,其列格式名稱為 TEST_BOUROUGH_GENDER,如下所示。 現在,列名稱中可以缺少 BOUROUGH,這意味著列中的值來自所有 BOUROUGH(即 NYC)。 我堆疊所有 TEST_BOUROUGH_GENDER 列名稱,然後創建名為 test、location 和 gender 的新列(見下文)。 當我遇到缺少 BOUROUGH 名稱的列時,我想將 NYC 添加到該列名稱中。 如果這可以用正則表達式來完成,我也更願意。 非常感謝任何想法或意見。
列格式名稱: CALC1_BROOKLYN_M, CALC2_QUEENS_F, CALC2_M, ..
ref = 當前數據表();
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" )));
統計堆棧<<新列(“性別”,公式(右(:標籤,1)))
回复:使用正則表達式重命名列這修復了一切,現在它可以工作了! 感謝所有的支持。 我看到的最後一個改進是,有沒有一種方法可以返回分隔符之前的所有內容,而不是用一長串與單詞 function 的連接? 因此,例如,有沒有一種方法可以將其寫為 || “_ALL_” ||單詞(5,cname,“_”)。 所以基本上我想要第 4 個分隔符之前的列名字符串。
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
<BR />
回复:使用正則表達式重命名列如果我明白你想要什麼,你可以使用 OR 子句來得到你想要的
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,"_")
)
)
);回复:使用正則表達式重命名列這就是我要的! 但是,當我嘗試將其放入我的腳本時,它崩潰了。 由於 IP 問題,我在示例中使用的值 (TEST_BOUROUGH_GENDER) 不是真實值,但僅用作示例。 同樣在最後一個分隔符“_”之後,該列將以 M 或 P 開頭。 有沒有辦法用 startswith 函數包含兩個可以開頭的單獨字符?
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,"_")
)
)
);回复:使用正則表達式重命名列只要 Bourough 不包含下劃線,這就應該有效。
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)));回复:使用正則表達式重命名列這個更改名稱的解決方案不使用正則表達式,但它是一段非常簡單的代碼:
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], "_" )
)
)
);