구조화되지 않은 문자열이 있는 열을 분할하는 방법안녕하세요, 전문가 여러분
구조화되지 않은 문자열이 있는 열을 여러 열로 분할하고 싶습니다. 하지만 복잡해서 실패합니다.
줄 바꿈으로 분할하는 걸 생각해 보았는데, 구분 기호로 텍스트에서 열로 나눌 수가 없네요. 대안은 줄 바꿈을 구분 기호에서 사용 가능한 모든 신호로 바꾸는 것입니다. 한 가지 옵션은 정규식( :Column 1, "^\R", "#",GLOBALREPLACE )을 실행하는 것이지만, 예상치 못한 결과가 나옵니다.

데이터 탐색 및 시각화Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법이중 줄바꿈(또는 JMP의 \!N)을 다른 것으로 대체하여 이 문제를 해결할 수 있습니다(저는 ¤를 사용했습니다).
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

그리고 열 이름에 대해 하나(또는 몇 개 더)의 추가 단계가 필요합니다.
Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법비슷한 아이디어가 있었어요. 대체문자를 사용하고 줄바꿈이 2번 나오는 것을 검색하는 거예요.
열 이름을 올바르게 지정하려면 ":"를 구분 기호로 사용할 수 있지만:
- ":"는 항목 내에서도 사용됩니다.
- 샘플에 ":"가 있지만 그 뒤에 줄바꿈이 없습니다.
그래서 저는 두 가지 접근 방식을 결합했습니다.
- 2x 줄바꿈 검색
- 찾다 ":"
헤더를 찾으려면
열 이름과 항목을 구분하려면 Contiguous 설정을 사용하여 열을 쌓을 수 있습니다.
Col2는 일시적으로 사용되므로 마지막에 삭제하거나 변환 열로 추가할 수 있습니다.
변환 열에서 텍스트를 열로 생성한 열은 표의 첫 번째 열입니다.
이렇게 하면 쉽게 선택하고 쌓을 수 있습니다. 새 열을 세고 인덱스로 선택하기만 하면 됩니다.
연속 설정을 사용하면 일부 더미 열이 추가되며, 이는 마지막 단계에서 제거됩니다.

dt = Open( "$DOWNLOADS/example3.jmp" );
tmpCol = dt << Transform Column ( "split",
Character,
Formula(
Substitute(
Regex(
Substitute( :Column 1, "\!r\!n", "#", "Sample:", "Sample^\!n" ),
"#{2,}(.*?):",
"^\1^",
GLOBALREPLACE
),
"#", "\!r"
)
)
);
before = NItems(dt << get column names());
dt << Text to Columns(
columns (tmpCol),
Delimiters( "^" )
);
newCols = NItems(dt << get column names()) - before;
result = dt << Stack(
columns(
Eval(1::newCols)
),
Number of Series( Eval(newCols/2) ),
Contiguous,
Drop All Other Columns( 1 )
);
// Move column names up
result << Move up;
cols= result << get column names();
cols = Filter each({col}, cols, Contains(col << get name, "split"))
result << Delete Columns(cols);보기에는 그다지 예쁘고 매끈하지 않은데...
계획 B: 입력값을 계산하기 위한 튜링 머신을 설정합니다 ; )
Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법@jthi 님 , 새로 만든 열에 대한 참조를 반환하는 새 수식 열을 만들어 주셔서 감사합니다.
JMP18부터 New Formula Column은 새로 생성된 열의 목록을 반환합니다.
Text to Columns는 생성된 열에 대한 참조가 포함된 목록도 반환할 수 있습니다.
다음은 소원입니다: 텍스트로 생성된 열 목록을 열로 저장합니다.
참고 사항:
연관 배열과 제거 작업을 통한 해결 방법은 여기서는 작동하지 않습니다. 열을 10 <2로 정렬한 다음 "사전순으로" 섞어서 스택 작업을 망칩니다.
Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법이건 접근하기에 좋은 아이디어네요.
Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법정규 표현식을 좋아하지만 JSL이 대체로 이해하기 어렵다면 열을 다시 코딩하고 문자열을 대체할 수 있습니다(빨간색 삼각형의 "문자열 대체..." 참조). 그런 다음 특이한 문자(내가 자주 사용하는 문자는 "%")를 정규 표현식으로 대체한 다음, 해당 문자를 기준으로 열을 분할(Cols -> Text to columns)합니다.
그러면 alt-ctrl-shift-r을 "다시 코딩"에 바인딩하고 alt-ctrl-shift-s를 "텍스트를 열로"에 바인딩하여 JMP 슈퍼 히어로처럼 보일 수 있으며, 이 모든 작업을 몇 번의 키 입력만으로 수행할 수 있습니다.
Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법@BHarris 조언 감사합니다. 그런데, linebreak를 저기 이상한 캐릭터로 바꾸는 정규 표현식은 어떻게 하나요?

Re: 구조화되지 않은 문자열이 있는 열을 분할하는 방법줄바꿈은 정규 표현식으로 "\n"입니다. 따라서 "\n"(따옴표 없음)을 검색하고 "정규 표현식 사용"을 클릭한 다음 "%"로 바꾸세요.