Regex로 열 이름 바꾸기안녕하세요,
아래에 표시된 것처럼 TEST_BOUROUGH_GENDER의 열 형식 이름을 가진 스택 할 엄청난 수의 열 목록이 있습니다. 이제 BOUROUGH가 열 이름에 누락 될 수 있으며 그 열의 값은 모든 BOUROUGH (즉, NYC)의 값입니다. 모든 TEST_BOUROUGH_GENDER 열 이름을 쌓은 다음 test, location 및 gender라는 새 열을 만듭니다 (아래 참조). BOUROUGH 이름이 누락 된 열의 사례를 실행할 때 해당 열 이름에 NYC를 추가하고 싶습니다. 정규식으로이 작업을 수행 할 수 있다면 더 좋을 것입니다. 어떤 생각이나 의견을 크게 주시면 감사하겠습니다.
열 형식 이름 : CALC1_BROOKLYN_M, CALC2_QUEENS_F, CALC2_M, ..
ref = 현재 데이터 테이블 ();
통계 스택 << ref 스택 (소스 레이블 열 ( "레이블"), 누적 데이터 열 ( "데이터"));
통계 스택 << 새 열 ( "test", 수식 (오른쪽 (: 레이블, 5)));
통계 스택 << 새 열 ( "위치", 수식 (정규식 : 레이블, "_ (. *) _", "\ 1"))));
통계 스택 << 새 열 ( "성별", 수식 (오른쪽 (: 레이블, 1)))
Re : Regex로 열 이름 바꾸기이것은 모든 것을 고쳐서 이제는 작동합니다! 모든 지원에 감사드립니다. 필자가 보게되는 마지막 개선점은 함수라는 단어와 긴 문자열을 연결하는 대신 구분 기호 앞에 모든 것을 반환 할 수있는 방법이 있다는 것입니다. 그래서 예를 들어 밑줄을 포함하여 <모든 값 앞에 Word (4, cname, "_")>와 같이 쓰는 방법이 있습니다. "_ALL_"|| Word (5, cname, "_"). 그래서 기본적으로 4 번째 구분 기호 앞에 열 이름 문자열이 필요합니다.
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 함수로 시작할 수있는 두 개의 별도 문자를 포함하는 방법이 있습니까?
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], "_" )
)
)
);