4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기안녕하세요 여러분,
저는 75종의 다양한 조류에 대한 서식지 적합성 지수를 개발 중입니다. 각 조류 종에 대해 여기에 설명된 것과 동일한 구조의 테이블(JMP 데이터 테이블로 첨부됨)이 있습니다. 나는 모든 종이 같은 테이블에 포함되도록 종별로 쌓을 것입니다. 첨부된 테이블은 계층적입니다. 계층 구조의 첫 번째 수준은 종입니다(현재는 하나만 존재하지만 결국에는 75개 종 모두에 대한 데이터가 같은 테이블에 있게 됩니다). 계층 구조의 다음 수준은 지형(예: 계곡, 테라스 또는 능선)입니다. 지형이 결정되면 계층의 다음 수준은 토지 피복 유형(예: 낙엽수, 침엽수림, 혼합림)입니다. 지형/토지 피복 조합이 결정되면 다음 수준은 목재 등급입니다(예: 관목 묘목, 묘목, 장대 목재, 대형 목재). 종, 지형, 토지피복 및 목재 등급의 각 4방향 조합은 0과 1 사이의 서식지 적합성 값을 갖습니다. 예를 들어, 오래된 낙엽수림을 좋아하는 지렁이벌레는 계곡/낙엽/대형 톱재 조합에 대해 높은 서식지 적합성 값(0.8)을 갖습니다. 이 같은 종은 능선/혼합림/묘목 조합의 서식지 적합성 값(0.2)이 더 낮습니다. 첨부된 표를 보시면 이해가 되실 겁니다.
주어진 사이트에 대한 종/지형/토지/목재 등급 조합을 기반으로 서식지 적합성 값을 찾기 위해 이 조회 테이블을 참조하는 열 속성으로 사용할 수 있는 공식을 만들고 싶습니다. 수천). 내 첫 번째 생각은 정교한 if then 문으로 이 작업을 수행하는 것이지만 각 종과 75종에 대해 60개의 지형/토지/삼림 연령 조합이 있습니다. 수식 편집기에서 수동으로 이외의 다른 방법으로 이 작업을 수행하는 방법을 모르겠고 이것은 미친 것 같습니다. 이 조회 테이블을 참조하여 4개의 계층적 범주 데이터 열(종/지형/토지 피복/목재 등급)의 고유한 조합을 기반으로 적합성 값을 가져올 수 있는 열 수식을 만드는 간단하고 효율적인 방법이 있습니까?
도움을 주시면 감사하겠습니다. 예전 포스팅을 보니 @brady_brady 훨씬 더 간단한 조회 테이블에 대한 수식을 만드는 방법에 대해 설명했지만 이와 같은 계층적 데이터 집합에 대해 어떻게 작동하는지 알 수 없었습니다. GO, JMP 커뮤니티, GO!!!
데이터 테이블Re: 4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기몇 가지 문제가 있습니다.어떤 버전의 JMP를 사용하고 있는지 모르겠습니다.분명히 버그가 있는 JMP 16에서 수식을 개발했습니다.따라서 JMP 16에 저장할 때 수식은 내가 테스트한 것에서 변경되었습니다.답변을 마친 후 버그를 보고하겠습니다.사용할 올바른 공식은 다음과 같습니다.
If( Row() == 1,
dt = Data Table( "WEWA suitability matrix with data" );
dtLookup = Data Table( "WEWA suitability matrix" );
Show( dt, dtlookup );
);
curSpec = Uppercase( dt:Species );
curLandForm = Uppercase( dt:Landform );
curLandCover = Uppercase( dt:Landcover );
curTimber = Uppercase( dt:Timber Class );
x = .;
Try(
x = dtLookup:Suitability[dtLookup << get rows where(
Uppercase( dtLookup:Species ) == curSpec & Uppercase( dtLookup:Landform ) == curLandForm & Uppercase( dtLookup:Landcover ) ==
curLandCover & Uppercase( dtLookup:Timber Class ) == curTimber
)][1],
.
);
x;
나는 또한 나의 마지막 응답에서 이 공식을 편집했으므로 아무도 그것에 대해 문제를 일으키지 않아야 합니다.
제공한 최신 데이터에 조회 데이터 테이블이 일치하지 않습니다.일부 소문자를 대문자로 변경했습니다.내가 쓴 원래 공식은 이것을 보상하지 않습니다.현재 버전에서는 더 이상 문제가 되지 않도록 모든 조회를 대문자로 수행하도록 했습니다.
Re: 4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기여기요 @txnelson
두 가지 솔루션 모두 나에게 의미가 있습니다. 수식 기반 솔루션을 선호합니다. 나는 당신이 만든 Observed Species 테이블의 "공식에서 파생된 .." 열의 공식을 두 번째 JMP 테이블에 복사하여 서식지 적합성 지수(첨부)를 실제로 계산하고 있습니다. 수식을 적용하려고 하면 다음 오류가 발생합니다.

이 문제를 어떻게 고칠지 잘 모르겠습니다. 첨부된 JMP 데이터 테이블의 "수식 파생 적합성 열)을 보고 내가 어디에서 오류를 범했는지 알려주시겠습니까? 도움을 주셔서 다시 한 번 감사드립니다. 케이시
Re: 4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기가상 조인을 사용해 볼 수도 있습니다.
가지고 있는 두 테이블에 연결 열을 만듭니다(예: 4개의 그룹화 값 모두 연결).


그런 다음 가상 조인을 수행합니다.
링크 ID로 적합한 테이블:

물건을 가져올 테이블:

내가 올바르게 기억한다면 가상 조인을 사용하려면 링크 ID가 저장될 데이터 테이블이 최소한 필요했습니다.
JMP의 가상 조인 이해를 위한 필수 사항
JMP 온에어 가상 조인
Re: 4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기편집: 죄송합니다. 테이블에서 이것을 열 속성으로 원하는 부분을 놓쳤습니다. 대화 상자에서 4개 값을 선택하는 사람을 기반으로 값을 반환하고 싶다고 생각했습니다. 따라서 Jim이 제안한 것과 같이 가야합니다.
건배,
브래디
///////////////////
안녕,
이를 수행하는 방법에는 여러 가지가 있습니다... 아마도 가장 "교과서" 방식은 다차원 키가 있는 연관 배열을 포함하지만 사용 사례의 경우 다음과 같은 작업을 수행하는 것이 훨씬 더 간단합니다.
Names Default To Here( 1 );
//suppose these are the values you want to look up, and you've gotten them somehow
spec = "Worm-eating warbler";
form = "Terrace-mesic";
cover = "Mixed";
class = "sapling";
//set a variable reference to the lookup table
dt1 = Data Table( "WEWA suitability matrix.jmp" );
//add a formula column to the lookup table, concatenating these 4 values, separated by a comma for clarity
dt1 << New Column( "Concat", character, formula( Concat Items( {:species, :landform, :landcover, :timber class}, "," ) ) );
//create a matrix of the suitabilities and a list of the combo values
suits = dt1:suitability << get values;
combos = dt1:concat << get values;
//create a lookup value from your 4 values by concatenating them in the same way you did in the formula
myLookup = concatitems({spec, form, cover, class}, ",");
//grab the suitability value you want; it will have the same position in its matrix as the lookup value has in its list
s = suits[contains(combos, myLookup)];
show (s);
건배,
브래디
Re: 4개의 범주형 변수가 있는 조회 테이블에서 값을 가져오는 JMP 수식 만들기다음은 조회를 처리하는 두 가지 방법입니다.첫 번째는 내가 생성하고 단 3개의 항목으로 샘플 테이블에 적용한 수식입니다.WEWA 적합성 매트릭스 데이터 테이블을 조회하고 적합성 값을 가져옵니다.좋은 공식이지만 그다지 효율적이지 않습니다.

다음은 "수식 지속 기간 적합성" 열에 사용된 수식입니다.
If( Row() == 1,
dt = Data Table( "WEWA suitability matrix with data" );
dtLookup = Data Table( "WEWA suitability matrix" );
Show( dt, dtlookup );
);
curSpec = Uppercase( dt:Species );
curLandForm = Uppercase( dt:Landform );
curLandCover = Uppercase( dt:Landcover );
curTimber = Uppercase( dt:Timber Class );
x = .;
Try(
x = dtLookup:Suitability[dtLookup << get rows where(
Uppercase( dtLookup:Species ) == curSpec & Uppercase( dtLookup:Landform ) == curLandForm & Uppercase( dtLookup:Landcover ) ==
curLandCover & Uppercase( dtLookup:Timber Class ) == curTimber
)][1],
.
);
x;
"적합성"이라는 열을 생성하는 두 번째 방법은 JMP의 업데이트 플랫폼을 사용하여 생성합니다..다음은 생성 스크립트입니다.
names default to here(1);
Data Table( "Observed Species" ) << Update(
With( Data Table( "WEWA suitability matrix" ) ),
Match Columns(
:Species = :Species, :Landform = :Landform, :Landcover = :Landcover,
:Timber Class = :Timber Class
)
);
추신Observed Species라는 데이터 테이블은 Sepcies, Landform, Landcover 및 Timber Class만 열로 사용하여 시작합니다.