Ho una tabella JMP che contiene dati misurati ogni ora in circa 50 stazioni diverse.In ciascuna stazione i dati sono talvolta riportati in ppm, altre volte in ppb, occasionalmente in entrambe le unità e occasionalmente non ci sono misurazioni.È un set di dati piuttosto grande e mi chiedo: come posso automatizzare la combinazione delle colonne relative a ciascuna stazione in un'unica colonna in un sistema di unità.Oppure devo creare manualmente una nuova colonna per ogni stazione e inserire una formula per eseguire la conversione? Sto solo cercando di accelerare questo passaggio di preparazione dei dati senza utilizzare Excel.
GRAZIE.HA FUNZIONATO!Ora tutto è in ppm e posso continuare con la mia analisi.
Ecco uno script che, data la struttura che hai mostrato, convertirà tutti i dati in ppm ed eliminerà le colonne ppb
È solo il punto di partenza e se ulteriori dettagli modificano i calcoli, possono essere inclusi nella logica
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, i <= N Cols( dt ), i++,
If( Trim( Word( -1, Column( dt, i ) << get name, ":" ) ) == "ppm",
ppbCol = Trim( Substr( Column( dt, i ) << get name, 1, Contains( Column( dt, i ) << get name, "ppm" ) - 1 ) || "ppb" );
For( k = 1, k <= N Rows( dt ), k++,
Column( dt, i )[k] = Sum( Column( dt, i )[k], Column( dt, ppbCol )[k]/1000 )
);
)
);
// Get rid of ppb columns
For( i = N Cols( dt ), i >= 1, i--,
If( Trim( Word( -1, Column( dt, i ) << get name, ":" ) ) == "ppb",
dt << delete columns( i )
)
);
Senza dubbio ci sono molti modi per farlo, ecco il primo che mi è venuto in mente presupponendo che il formato della colonna nel tuo esempio sia coerente. Puoi eseguire lo script in fondo al post per vedere un esempio completo o seguire i commenti verdi nello script e gli screenshot qui sotto:
Porta tutti i dati della stazione in un'unica colonna utilizzando Stack:

Formula per Stazione (mostrata sia nel formato 'carino' che nel codice che ottieni facendo doppio clic sulla formula:

La formula per Unità è simile:

Formula per i conti di dati per ciascuna unità potenziale:

La tabella si basa sul tipo di dati ordinale o nominale per Intervalli e Stazione:

Quindi utilizzare Crea tabella dati dal menu tabula.
Script per ricreare un esempio:
//To see a full example you can copy this this into a new script window and press Run, or just following along
//with the green comments
Names default to here(1);
//Recreate part of your sample data table, you could skip this part and open your original data instead
//Note that the times are ordinal or nominal data types, this will be imporant in the tabulate platform later
dt = New Table( "Raw Data",
Add Rows( 2 ),
New Column( "IntervalStart", Numeric, "Ordinal", Format( "m/d/y h:m", 19 ), Input Format( "m/d/y" ),
Set Values( [3503606400, 3503610000] ),
),
New Column( "IntervalEnd", Numeric, "Ordinal", Format( "m/d/y h:m", 19 ), Input Format( "m/d/y h:m" ),
Set Values( [3503609940, 3503613540] )
),
New Column( "StationName: Anzac-Unit:ppb", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) ),
New Column( "StationName: Anzac-Unit:ppm", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., .] ) ),
New Column( "StationName: Ardrossan-Unit: ppb", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., .] ) ),
New Column( "StationName: Ardrossan-Unit: ppm", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [11, 12] ) )
);
//Get a reference to your current data table
dt = Current data table();
//Stack all of the columns - use Tables > Stack and include all of the columns except the first two which are times
dtStacked = dt << Stack(
columns(
(dt << Get Column Names())[3::n col(dt)]
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
//Now add three new columns to find the station and units, and calculate the concentration based on the units
//you should be able to copy and paste the part inside the 'Formula' function below into the formulas of your new columns
dtStacked << New Column("Station", Character, "Nominal", Formula(Words(:Label, "-")[1]));
dtStacked << New Column("Unit", Character, "Nominal", Formula(Words(:Label, "-")[2]), Set Display Width(65));
dtStacked << New Column("Data (ppm)", Numeric, "Continuous", Format("Best", 12), Formula(If(Contains(:Unit, "ppm"), :Data, Contains(:Unit, "ppb"), :Data / 1000)));
//Put back in standard format using the tabulate platform. Drag times and the station into
//columns on the left and add the mean and N as data fields. Note that in the resulting table anything
//with a N(Data) greater than 1 might have a problem!
(dtStacked << Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Data ), Statistics( Mean, N ) ),
Row Table( Grouping Columns( :IntervalStart, :IntervalEnd, :Station ) )
)
)) << Make Into Data Table;
Ciao Jim,
Ho pubblicato un'immagine di come appaiono i dati, in risposta alla tua domanda.Per favore dimmi i passaggi per modificare i dati in atto.
Grazie.
CIAO,
Ecco come appaiono i dati.Il nome della colonna indica la stazione e le unità di misura.
Grazie per l'aiuto
I dati appaiono come numerici (senza le unità - o unità in un campo separato) o come dati in caratteri dove le unità appaiono con il numero (ad esempio, 13 ppm)?Sarebbe più semplice se potessi fornire un esempio di come appaiono i dati.Una formula dovrebbe effettuare la conversione desiderata, ma la formula esatta dipende dall'aspetto dei dati.
È possibile utilizzare uno script molto semplice per modificare i valori direttamente nella colonna in cui sono arrivati.Oppure puoi utilizzare lo strumento Ricodifica per fare lo stesso, in un formato interattivo.Come si determina quali sono le unità di misura?C'è una colonna separata che lo indica?