Oggetto: Creazione di una formula JMP per estrarre i valori da una tabella di ricerca con quattro variabili categorialiCi sono un paio di problemi.Non so quale versione di JMP stai utilizzando.Ho sviluppato la formula in JMP 16, che apparentemente ha un bug.Pertanto la formula è stata modificata quando l'ho salvata in JMP 16, rispetto a ciò con cui l'avevo testata.Segnalerò il bug dopo aver finito di risponderti.La formula corretta da utilizzare è:
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;
Ho anche modificato questa formula nella mia ultima risposta, quindi nessuno dovrebbe avere problemi con essa.
Negli ultimi dati che hai fornito, c'è una mancata corrispondenza con la tabella dei dati di ricerca.Hai cambiato alcune delle lettere minuscole in maiuscole.La formula originale che ho scritto non compensa questo.Nella versione attuale, ho forzato l'esecuzione di tutte le ricerche in maiuscolo in modo che non dovrebbe più essere un problema.
Oggetto: Creazione di una formula JMP per estrarre i valori da una tabella di ricerca con quattro variabili categorialiEHI @txnelson
Entrambe le tue soluzioni hanno senso per me. Preferirei la soluzione guidata dalla formula. Sono andato avanti e ho copiato la formula dalla tua colonna "formula derivata .." nella tabella delle specie osservate che hai creato in una seconda tabella JMP in cui sto effettivamente calcolando gli indici di idoneità dell'habitat (allegato). Quando provo ad applicare la formula ottengo il seguente errore:

Non sono sicuro di come risolverei questo problema. Ti dispiacerebbe dare un'occhiata alla "colonna di idoneità derivata dalla formula) nella tabella di dati JMP allegata e farmi sapere dove potrei aver commesso un errore? Grazie ancora per il vostro aiuto. Casey
Oggetto: Creazione di una formula JMP per estrarre i valori da una tabella di ricerca con quattro variabili categorialiPotresti anche provare a utilizzare Virtual Join.
Crea una colonna di collegamento (ad esempio concatena tutti e quattro i valori di raggruppamento) a entrambe le tabelle che hai:


E quindi eseguire il join virtuale:
Tabella con idoneità come Link ID:

Tabella in cui vuoi estrarre le cose:

Se non ricordo male, i join virtuali richiedevano di avere almeno il datatable che verrà salvato con l'ID collegamento.
Elementi essenziali per comprendere Virtual Join in JMP
JMP On Air Virtual Join
Oggetto: Creazione di una formula JMP per estrarre i valori da una tabella di ricerca con quattro variabili categorialiEDIT: OOPS, ho perso la parte in cui lo desideri in una tabella come proprietà di una colonna: pensavo che volessi solo restituire un valore basato su qualcuno che seleziona i 4 valori in una finestra di dialogo o qualcosa del genere. Quindi, dovresti andare con qualcosa come propone Jim.
Saluti,
Brady
////////////////////
CIAO,
Esistono molti modi per farlo ... probabilmente il modo più "da manuale" prevede un array associativo con chiavi multidimensionali, ma per il tuo caso d'uso è molto più semplice fare qualcosa di simile al seguente:
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);
Saluti,
Brady
Oggetto: Creazione di una formula JMP per estrarre i valori da una tabella di ricerca con quattro variabili categorialiEcco due modi per gestire la tua ricerca.La prima è una formula che ho creato e applicato a una tabella di esempio con solo 3 voci.Cerca nella tabella dei dati della matrice di idoneità WEWA e inserisce il valore di idoneità.È una buona formula, ma non molto efficiente.

Ecco la formula utilizzata per la colonna "Formula durated Idoneità"
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;
Il secondo metodo, che crea la colonna denominata "idoneità", viene creato utilizzando la piattaforma di aggiornamento in JMP..Ecco lo script per la sua creazione
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
)
);
PSLa tabella dei dati chiamata Specie osservate inizia con solo Sepcies, Landform, Landcover e Timber Class come colonne.
Creazione di una formula JMP per estrarre valori da una tabella di ricerca con quattro variabili categorialiCiao a tutti,
Sto sviluppando indici di idoneità dell'habitat per 75 diverse specie di uccelli. Ho tabelle con la stessa struttura di quella qui descritta (e allegata come tabella dati JMP) per ciascuna specie di uccelli. Li impilerò per specie in modo che tutte le specie siano incluse nella stessa tabella. La tabella allegata è gerarchica. Il primo livello della gerarchia riguarda le specie (attualmente ne esiste solo una, ma col tempo i dati per tutte le 75 specie saranno nella stessa tabella). Il livello successivo della gerarchia è la morfologia del territorio (ad esempio, valle, terrazzo o crinale). Una volta determinata la morfologia del territorio, il livello successivo della gerarchia è il tipo di copertura del suolo (ad esempio, foresta decidua, conifera, mista). Una volta determinata la combinazione morfologia/copertura del terreno, il livello successivo è la classe del legname (ad esempio, piantina di arbusti, alberello, legname segato su palo, legname segato di grandi dimensioni). Ciascuna combinazione a 4 vie di specie, morfologia, copertura del suolo e classe di legname ha un valore di idoneità all'habitat compreso tra 0 e 1. Ad esempio, i Warblers vermi, che amano le foreste decidue più vecchie, hanno un valore elevato di idoneità all'habitat (0,8) per la combinazione valle / latifoglie / legname da sega di grandi dimensioni. Questa stessa specie ha un valore di idoneità ambientale inferiore (0,2) per la combinazione crinale/bosco misto/alberello. Se guardi la tabella allegata questo ti capirà.
Vorrei essere in grado di creare una formula da utilizzare come proprietà di colonna che faccia riferimento a questa tabella di ricerca per trovare valori di idoneità dell'habitat in base alla combinazione specie/morfologia/copertura del suolo/classe di legname per un dato sito (di cui ho migliaia). Il mio primo pensiero è stato quello di farlo con un'elaborata dichiarazione if then, ma ci sono 60 combinazioni di forma del terreno/copertura del suolo/età della foresta per ciascuna specie e 75 specie. Non so come farlo se non manualmente nell'editor delle formule e sembra pazzesco. Esiste un modo semplice ed efficiente per creare una formula di colonna che possa fare riferimento a questa tabella di ricerca per ottenere valori di idoneità basati su combinazioni univoche delle quattro colonne di dati categorici gerarchici: specie/morfologia/copertura del suolo/classe di legname?
Sarei grato per qualsiasi aiuto con questo. Ho visto un post più vecchio di @brady_brady su come creare una formula per una tabella di ricerca molto più semplice, ma non sono riuscito a capire come potrebbe funzionare per un set di dati gerarchici come questo. VAI, comunità JMP, VAI!!!
Combinazione e pulizia dei dati