JSL을 사용하여 행렬 분기의 중간에있는 데이터를 분류 및 요약하고 요약 결과를 행렬 형태로 얻는 방법은 무엇입니까?JSL을 사용하여 행렬 분기의 중간에있는 데이터를 분류 및 요약하고 요약 결과를 행렬 형태로 얻는 방법은 무엇입니까?

전문가 감사합니다!
dt=Open("$SAMPLE_DATA/Big Class.jmp");
ar=dt<<GETASMATRIX></GETASMATRIX>
스크립팅Re : JSL을 사용하여 행렬 분기의 중간에있는 데이터를 분류하고 요약하고 행렬 형태로 요약 결과를 얻는 방법은 무엇입니까?최종 결과를 얻는 가장 좋은 방법인지는 잘 모르겠지만 행렬 만 사용하여 수행하려면 다음을 수행 할 수 있습니다.
NamesDefaultToHere(1);
// Sample data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Matrix with all 'height' and 'weight' values
ar = dt << GetAsMatrix({4,5});
// Discard rows
ar = ar[6::35, 0];
// Find out the distinct levels of 'height'
hl = Matrix(AssociativeArray(ar[0,1]) << getKeys);
// Build the average 'weight' for each level into a new matrix 'rm'
rm = J(NRow(hl), 2, .);
for(h=1, h<=NRow(hl), h++,
rm[h, 1] = hl[h];
rm[h, 2] = VMean(ar[Loc(ar[0, 1] == hl[h]), 2]);
);
Print(rm);Re : JSL을 사용하여 행렬 분기의 중간에있는 데이터를 분류하고 요약하고 행렬 형태로 요약 결과를 얻는 방법은 무엇입니까?이안 감사합니다! 이것이이주기가 작동하는 방식입니다.
ar=dt<<GETASMATRIX></GETASMATRIX>
Re : JSL을 사용하여 행렬 분기의 중간에있는 데이터를 분류하고 요약하고 행렬 형태로 요약 결과를 얻는 방법은 무엇입니까?다음은 보이지 않는 테이블을 생성하지만 루핑을 피하는 접근 방식입니다. 성능이 사용자의 요구에 적합한 경우이 접근 방식은 사용하고 이해하기 쉽습니다.
건배,
브래디
dt = open("$Sample_Data/Big Class.jmp");
dtSub = dt << subset(rows(6::35), invisible);
dtsum = dtsub << summary(group(:height), mean(weight), invisible);
mat = dtSum << get as Matrix;
close(dtSum, nosave);
close(dtSub, nosave);
show(mat);Re: JSL을 사용하여 행렬 분기 중간에 데이터를 분류 및 요약하고 요약 결과를 행렬 형태로 얻는 방법은 무엇입니까?편집하다:
아래 코드의 원본 버전에서 오타를 발견하여 수정했습니다. 마지막 줄의 오타는 다음과 같습니다.
지금 (들)
대신 다음을 사용하십시오.
지금 (h)
물론 nrow(n) 또는 nrow(m)도 작동합니다. 각 벡터 h, n 및 m이 동일한 수의 행을 갖기 때문입니다.
미안합니다.
건배,
브래디
//////////////////////////////원본 게시물:
테이블 기반 접근 방식의 성능을 살펴보면 테이블에 따라 단순성을 상쇄할 수 있는 매트릭스 기반 접근 방식보다 훨씬 느립니다.
다음은 또 다른 매트릭스 기반 접근 방식입니다. Ian이 게시한 것과 유사하게 작동하지만 다음과 같은 몇 가지 이유로 포함합니다. " 요약 기능 및 c) 루핑 및 이와 관련된 잠재적인 인덱싱 함정을 피하기 때문입니다.
첫 번째: "선택됨" 열입니다. 아래 코드의 첫 번째 줄에서 테이블에 새 열을 추가합니다. 이 열은 선택한 행에서는 1로, 다른 곳에서는 0으로 설정됩니다. 이를 통해 새 테이블을 만들 필요 없이 테이블 기반 플랫폼과 요약 및 요약과 같은 기능을 사용하는 것을 목표로 추가 그룹화 열을 만들 수 있습니다.
다음으로 Summarize() hack: :selected와 :height로 그룹화합니다. h, n 및 m 값이 행렬로 반환되는 동안 by 변수 값은 행렬에 배치할 수 있는 경우에도 문자열 목록에 배치됩니다. 따라서 이 경우 b는 두 문자열 목록의 목록입니다. 따라서 이러한 값 중 하나라도 행렬 형식으로 표시하려면 원하는 문자열 목록을 행렬로 변환하거나(목록이 크면 비용이 많이 듦) Min 또는 Max와 같은 "저렴한" 통계를 계산할 수 있습니다. 바로 같은 열에서 해당 값을 얻으려면 ... 높이 열에 대해 아래에서 수행하는 작업입니다.
건배,
브래디
dt << New Column( "Selected", formula( Selected( Row State() ) ) );
dt << Select Rows( 6 :: 35 );
Summarize( dt, b = by( :Selected, :height ), h = max( :height), n = Count( :weight ), m = Mean( :weight ) );
sumMat = (h || n || m)[contains(b[1], "1"):: nrow(h),0]; //only use the results where selected == 1