Ri: script jsl per ricodificare più colonneGrazie!
Ri: script jsl per ricodificare più colonneUna soluzione alternativa consisterebbe nel creare una nuova colonna con una formula basata sulla colonna che si desidera ricodificare.
Quindi elimina la colonna originale
Ri: script jsl per ricodificare più colonneGrazie molto!
Ri: script jsl per ricodificare più colonneEcco la soluzione che utilizza la funzione Recode scritta in JSL È molto più veloce rispetto all'elaborazione riga per riga
Names Default To Here( 1 );
dmdt = current data table();
nc = dmdt << get column names( Character );
For( i = 1, i <= N Items( nc ), i++,
col = Column( dt, nc[i] );
colname = col << getname();
Eval(
Parse(
Eval Insert(
"\[
dmdt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig,
{ "1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"},
Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\"
)
)
);
);
Ri: script jsl per ricodificare più colonneGrazie mille, il tuo codice con l'array associativo ha funzionato perfettamente.
Ho provato anche l'altra opzione, aggiungendo
Match(As Column( lstColNames_n3[i])[Row()],
ma non ha funzionato.
Ma ho risolto il mio problema.
Grazie molto.
Ri: script jsl per ricodificare più colonneHo modificato la mia risposta precedente, dovrebbe aiutare con la ricodificaRi: script jsl per ricodificare più colonneAvrei bisogno di ricodificare i valori. Grazie.
Ri: script jsl per ricodificare più colonneDevi ricodificare i valori o potresti eventualmente utilizzare le etichette dei valori delle proprietà delle colonne (in questo modo non perderai i dati originali), esempio: Ricodifica più colonne con lo script JSL
Modificare:
E se devi ricodificarli sul posto, ci sono diversi modi per farlo (userei Associative Array):
Names Default To Here(1);
dt3 = current data Table ();
n3 = dt3 << Get Column Names(string);
show(n3);
//create associative array to use matching keys to values
matchAa = Associative Array(
{"1","2","3","4","5"},
{"too low","too low","right","too high","too high"}
);
show(matchAa);
//loop over column names
For(i = 1, i <= N Items(n3), i++,
//refer to column and use set each value to update values
Column(dt3, n3[i]) << Set Each Value(
matchAa[AsColumn(n3[i])[Row()]]
);
);
E per la tua soluzione penso che ci sia un problema nel modo in cui fai riferimento ai valori nella funzione Match e devi aggiungere [Row ()] per ottenere singoli valori per Matching
Match(As Column( lstColNames_n3[i])[Row()],
Modifica2:
Aggiunto script di esempio completo come allegato
jsl per ricodificare più colonneCarissimi,
Sto cercando di ricodificare più colonne utilizzando il seguente script (anche in allegato insieme a una tabella di dati di esempio). Ho provato diverse modifiche ma non funziona. I valori nelle colonne scompaiono invece di essere ricodificati.
Apprezzo qualsiasi aiuto.
Grazie molto,
Marcello.
dt3 = Current Data Table();
n3 = dt3 << Get Column Names();
Show( n3 );
lstColNames_n3 = dt3 << Get Column Names();
Show( lstColNames_n3 );
Show( lstCols_n3 );
lstCols_n3 = {};
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
colName = lstColNames_n3[i];
col = Column( dt3, i );
Insert Into( lstCols_n3, col );
);
Show( lstCols_n3 );
For Each Row(
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
As Column( lstColNames_n3[i] ) = Match( As Column( lstColNames_n3[i] ),
"1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"
)
)
);
Modellazione statistica avanzataAutomazione e scriptingMiscelazione e pulizia dei datiProgettazione di esperimentiPersonalizzazione di massaQualità e ingegneria di processo