구분 기호로 열 데이터를 분할하고 다른 열 구분 기호와 일치시키기 위한 JSL 스크립팅에 대한 도움이 필요합니다. 데이터 분할안녕하세요 여러분
저는 JMP17을 사용하고 있으며 아래의 입력 데이터를 원하는 출력 데이터로 처리하기 위한 JSL 스크립트에 대한 도움이 정말 필요합니다.
입력 데이터 테이블:
| 데이터 | 라벨 | ID |
|------------|------------|---------|
| 1_1_64_5_2 | D1_DD4_FF1_FIN1_GPES2 | 애플1 |
| 1_1_2 | D2_D3_D4 | 애플1 |
| 1_2_68_5_6 | D1_DD4_FF1_FIN1_GPES2 | 오렌지1 |
| 1_2_2 | D2_D3_D4 | 오렌지1 |
| 2_1_50_3_10 | D1_DD4_FF1_FIN1_GPES2 | 포도1 |
| 2_1_2 | D2_D3_D4 | 포도1 |
출력 형식: (열 순서 배열은 중요하지 않음)
| ID| 라벨| 데이터|
|------------|------------|---------|
| 애플1 | D1 | 1 |
| 애플1 | DD4 | 1 |
| 애플1 | FF1 | 64 |
| 애플1 | FIN1 | 5 |
| 애플1 | GPES2 | 2 |
| 애플1 | D2| 1 |
| 애플1 | D3| 1 |
| 애플1 | D4 | 2 |
| 오렌지1| D1 | 1 |
| 오렌지1| DD4 | 2|
| 오렌지1| FF1 | 68|
| 오렌지1| 핀1 | 5 |
| 오렌지1| GPES2 | 6 |
| 오렌지1| D2| 1 |
| 오렌지1| D3| 2 |
| 오렌지1| D4 | 2 |
| 포도1 | D1 | 2 |
| 포도1 | DD4 | 1|
| 포도1 | FF1 | 50|
| 포도1 | 핀1 | 3 |
| 포도1 | GPES2 | 10 |
| 포도1 | D2| 2 |
| 포도1 | D3| 1 |
| 포도1 | D4 | 2 |
자동화 및 스크립팅기본 데이터 분석 및 모델링데이터 접근Re: 구분 기호로 열 데이터를 분할하고 다른 열 구분 기호와 일치시키기 위한 JSL 스크립팅에 대한 도움이 필요합니다. 데이터 분할예시 표를 제공해 줄 수 있나요? 텍스트만으로는 시작 상황을 이해하기가 좀 어렵습니다.
Re: 구분 기호로 열 데이터를 분할하고 다른 열 구분 기호와 일치시키기 위한 JSL 스크립팅에 대한 도움이 필요합니다. 데이터 분할모든 레이블과 데이터 값에 같은 수의 항목이 있다고 가정합니다. 그렇다면 이 방법이 효과가 있을 것입니다. 그렇지 않다면 이를 확인하기 위해 약간 더 많은 논리를 추가해야 하지만, 이 방법이 데이터를 처리하는 빠른 방법이 될 것입니다.
// this would be whatever your input table name is<BR />dt0 = Data table("Input Table");
dt1 = new table("Output table");
dt1<<NEW column=""></NEW>Re: 구분 기호로 열 데이터를 분할하고 다른 열 구분 기호와 일치시키기 위한 JSL 스크립팅에 대한 도움이 필요합니다. 데이터 분할시작점이 어디인지 확실하지 않으므로, 텍스트 파일이 아닌 데이터 테이블이 있다고 가정하겠습니다.

데이터 및 레이블 열을 선택하고 해당 열에 텍스트를 열로 사용하세요.

"이전" 열을 제거하세요(또는 끝으로 옮기세요).
다음으로 여러 시리즈 스택을 사용하여 데이터를 스택합니다.

추가 열 삭제, 열 순서 변경 및 이름 변경

누락된 행 삭제

결과를 확인하고 JMP에서 당신을 위해 만든 스크립트(또는 워크플로)를 사용합니다.
워크플로도 첨부되었으며(약간의 정리가 필요할 수 있음) 아래 워크플로를 기반으로 스크립트를 정리했습니다(필요에 따라 훨씬 더 강력해질 수 있음):
더 보기...
Names Default To Here(1);
dt = Current Data Table();
dt << Text to Columns(columns(:" Data"n, :Label), Delimiters("_"));
dt << Delete Columns(:" Data"n, :Label);
dt_stacked = dt << Stack(
columns(:Data 1, :Data 2, :Data 3, :Data 4, :Data 5, :Label 1, :Label 2, :Label 3, :Label 4, :Label 5),
Number of Series(2),
Contiguous,
Output Table("Stacked result")
);
dt_stacked << Delete Columns(:Label, :Label 2);
Column(dt_stacked, "Data 2") << Set Name("Label");
dt_stacked << Move Selected Columns({:Label}, after(:ID));
dt_stacked << Select Where(:Label == "") << Delete Rows;
Re: 구분 기호로 열 데이터를 분할하고 다른 열 구분 기호와 일치시키기 위한 JSL 스크립팅에 대한 도움이 필요합니다. 데이터 분할제가 제안할 수 있는 몇 가지 개선 사항은 다음과 같습니다.
- 일반적으로 Current Data Table()을 사용하지 마십시오. 이 경우 잠재적으로 이를 사용하여 초기 테이블을 선택할 수 있지만 이미 참조가 있으므로 계속 변경할 필요가 없습니다(예: current data table(dt1); 은 불필요하고 문제를 일으킬 수 있음)
- For Each Row를 사용할 때 특정 테이블을 반복하고 현재 테이블이 무엇인지에 의존하지 마세요(for each row(dt0,...))
- For Each + Across를 사용하여 여러 컨테이너를 반복할 수도 있습니다. Across를 사용하여 다른 길이의 컨테이너를 처리할 때 다른 동작을 강제할 수도 있습니다.
- 열 이름 + 값을 알고 있다면 << 행 추가로 이미 값을 추가할 수 있지만 엉망이 될 수 있습니다. (보통 저는 귀하처럼 행을 추가한 다음 값을 추가합니다.)
더 보기...
Names Default To Here(1);
dt_input = Current Data Table();
// dt_input = Data table("Input Table");
dt_result = New Table("Output table");
dt_result << New Column("ID", Character, Nominal);
dt_result << New column("Label", Character, Nominal);
dt_result << New Column("Data", Character, Nominal);
For Each Row(dt_input,
id_val = Column(dt_input, "ID")[];
data_vals = Words(Column(dt_input, "Data")[], "_");
label_vals = Words(Column(dt_input, "Label")[], "_");
For Each({{cur_label, cur_data}}, Across(label_vals, data_vals),
dt_result << Add Rows({ID = id_val, Label = cur_label, Data = cur_data});
);
);