正規表現で列名を変更するこんにちは、
以下に示すように、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(ソースラベル列( "Label")、スタックデータ列( "Data"));
stat stack << New Column( "test"、式(Right(:Label、5)));
stat stack <<新しい列( "location"、式(Regex(:Label、"_(。*)_"、"\ 1")));
統計スタック<<新しい列( "性別"、式(右(:ラベル、1)))
Re:Regexで列名を変更するこれですべてが修正され、今では機能します。すべてのサポートをありがとう。最後の改善点は、functionという単語と長い連接文字列を使用する代わりに、区切り文字の前にすべてを返す方法があることです。そのため、<アンダースコアを含む
Column(cname) << set name(
Word(1, cname, "_") || "_"|| Word(2, cname, "_") || "_" || Word(3, cname, "_") || "_" || Word(4, cname, "_") ||"_ALL_" || Word(5,cname,"_")
<BR />
Re:Regexで列名を変更する私があなたが欲しいものを理解しているなら、あなたはあなたが欲しいものを得るために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,"_")
)
)
);Re:Regexで列名を変更するこれは私が欲しいものです!しかし、これを自分のスクリプトに入れようとすると、クラッシュします。私の例で使用した値(TEST_BOUROUGH_GENDER)は、IPの問題により実際のものではありませんが、例として使用されています。また、最後の区切り文字 "_"の後の列は、MまたはPのいずれかで始まります。startswith関数を使用して、先頭に2つの別々の文字を含めることができますか?
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:Regexで列名を変更する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)));Re:Regexで列名を変更する名前を変更するこのソリューションでは正規表現を使用しませんが、非常に単純なコードです。
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], "_" )
)
)
);