JSL을 사용하여 행렬 분기 중간에 있는 데이터를 분류 및 요약하고 요약 결과를 행렬 형식으로 얻는 방법은 무엇입니까?"Big Class.jmp"의 경우 "높이" 및 "무게" 열이 행렬에 기록됩니다.
그런 다음 행렬의 6행에서 35행까지의 데이터가 분류되고 요약됩니다. 각 키의 평균 체중이 요약됩니다. 이 결과는 메모리 내 행렬에만 저장하면 됩니다.

감사합니다 전문가!
dt=Open("$SAMPLE_DATA/Big Class.jmp");
ar=dt<<GETASMATRIX></GETASMATRIX>
고급 통계 모델링콘텐츠 구성데이터 탐색 및 시각화결과 공유 및 소통Re: JSL을 사용하여 행렬 분기 중간에 있는 데이터를 분류 및 요약하고 요약 결과를 행렬 형식으로 얻는 방법은 무엇입니까?편집하다:
아래 코드의 원래 버전에서 오타를 발견하여 수정했습니다. 마지막 줄에서 오타는 다음과 같습니다.
nrow(들)
대신 다음을 사용하십시오.
n행(h)
물론 nrow(n) 또는 nrow(m)도 각 벡터 h, n 및 m이 동일한 수의 행을 가지므로 작동합니다.
미안합니다.
건배,
브래디
/////////////////////////////원본 게시물:
테이블 기반 접근 방식의 성능을 살펴보면 매트릭스 기반 접근 방식보다 훨씬 느리므로 테이블에 따라 단순성을 상쇄할 수 있습니다.
다음은 또 다른 매트릭스 기반 접근 방식입니다. Ian이 게시한 것과 유사하게 수행되지만 다음과 같은 몇 가지 이유로 포함합니다. a) 행이 선택되면 1, 그렇지 않으면 0에 플래그를 지정하는 "선택된" 열의 아이디어를 도입하기 위해, b) 요약 함수의 "해킹"을 표시하기 위해, c) 루프 및 이와 관련된 잠재적인 인덱싱 함정을 피하기 때문입니다.
첫 번째: "선택됨" 열입니다. 아래 코드의 첫 번째 줄에서 테이블에 새 열을 추가합니다. 이 열은 선택한 행에서 자체적으로 1로 설정되고 다른 행에서는 0으로 설정됩니다. 이를 통해 새 테이블을 만들지 않고도 요약 및 요약과 같은 테이블 기반 플랫폼 및 기능을 사용한다는 목표로 추가 그룹화 열을 만들 수 있습니다.
다음으로 Summarize() 해킹: :selected 및 :height로 그룹화합니다. h, n 및 m 값이 행렬에 반환되는 동안 by 변수(들) 값은 행렬에 배치될 수 있더라도 문자열 목록에 배치됩니다. 따라서 이 경우 b는 두 문자열 목록의 목록입니다. 따라서 이러한 값을 행렬 형식으로 원하는 경우 원하는 문자열 목록을 행렬로 변환하거나(목록이 크면 비용이 많이 들음) 동일한 열에서 최소 또는 최대와 같은 "저렴한" 통계를 계산하여 해당 값을 얻을 수 있습니다... 높이 열에 대해 아래에서 수행하는 작업입니다.
건배,
브래디
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
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을 사용하여 행렬 분기 중간에 있는 데이터를 분류 및 요약하고 요약 결과를 행렬 형식으로 얻는 방법은 무엇입니까?감사합니다! 이것이 이 주기가 작동하는 방식입니다.
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);