Rimuovi le righe con uno o più valori vuoti utilizzando JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho una tabella in cui ogni riga contiene un singolo tipo di misurazione a tre temperature, ciascuna memorizzata nella propria colonna. In definitiva, voglio calcolare i delta tra queste misurazioni e quindi impilare i dati in una nuova tabella. Tuttavia, non tutte le misurazioni vengono effettuate a tutte e tre le temperature e devo escludere quelle misurazioni (righe) in cui una o più colonne di dati sono vuote. Devo farlo utilizzando uno script JMP 9.0.
Dato:
dtSplit =
| Misurazione | T1 | T2 | T3 |
|---|
| Misura A | 5 | 12 | 89 |
| Misura B | 13 | | 8 |
| Misura C | | 52 | 57 |
| Misura D | 22 | 21 | |
| Misura E | 8 | | |
| Misura F | | | 15 |
| Misura G | | 54 | |
Devo produrre:
dtPulire =
| Misurazione | T1 | T2 | T3 |
|---|
| Misura A | 5 | 12 | 89 |
Stavo cercando di usare qualcosa del tipo:
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
Tuttavia, qualsiasi Select Where(Is Vuoto(:COL)) seleziona sempre tutte le righe.
Sono sicuro che mi manca qualcosa di semplice, il tuo aiuto è molto apprezzato, grazie,
- Opaco
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLCIAO
Grazie per l'input. Ho controllato il modello di dati mancanti che hai consigliato e in un certo senso funziona ma non completamente.
Nella mia tabella dati, ogni nome ha 4 righe diverse. Ognuna delle 4 righe di un nome è il risultato di 1 test (sens, maschera, EVM e potenza)
Nell'esempio della tabella dati, il dispositivo A non supera il primo test "Sens" e supera il 2°, 3° e 4° test. Poiché il dispositivo A non supera "Sens", si tratta di un dispositivo guasto anche se supera il 2°, 3° e 4° test.
Se utilizzo Tables==>Missing Data Pattern, la 2a, 3a e 4a riga di A verranno eliminate. Che non è quello che sto cercando. Voglio eliminare 4 righe di ciascun nome quando non ci sono dati su di esse (nessun dato su 10 MHz, 20 MHz, 30 MHz e 1000 MHz). Nella mia tabella dati, i nomi C, G, H, I, JK e N verranno eliminati.
Grazie per i tuoi aiuti
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLDevi esaminare la piattaforma Missing Data Pattern modulo.Ti consentirà di identificare tutte le righe che hanno tutti i valori mancanti, quindi potrai scegliere di eliminare le righe, ecc.
Tabelle==>Modello dati mancante
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLCIAO
Questo è il mio primo post e non sono sicuro che il file Excel allegato venga completato o meno. Altrimenti,
Allego anche il PNG del file di dati di esempio
Sono molto nuovo in JMP (sto usando JMP 14) e ho bisogno di aiuto con lo script di eliminazione delle righe.
La mia tabella dati contiene dati di molti dispositivi diversi per cui ciascun dispositivo viene testato
quattro diversi guasti (sensibilità, maschera, EVM e potenza) su un'ampia gamma di frequenze
da 10 MHz a 1000 MHz. I dispositivi di passaggio sono quelli che hanno celle vuote "" per tutti e quattro
testare su gamme di frequenza e vorrei rimuoverli dalla tabella dati.
(eliminare le righe in verde del file Excel allegato - dispositivi C, G, H, I, J, K e N)
1° problema: come eliminare le righe vuote (con colonne da 10 MHz a 1000 MHz = vuote)
Il comando seguente che ho trovato è simile ma non utile perché ho 100 colonne diverse e "e"
pubblicarli tutti è piuttosto lungo e non scalabile se in seguito decidessimo di aumentare la frequenza
inferiore a 1000 MHz
dtsplit << Seleziona Dove(Manca(:T1) | Manca(:T2) | Manca(:T3)) << Elimina righe;
Ho provato anche questo comando:
For( i = 2, i <= 101, i++,
dtSplit << seleziona dove ( manca ( colonna ( i )[] ) ) << elimina righe
);
Questo comando mi dà un errore:
Nello script seguente, errore contrassegnato da /*###*/
dt = Tabella dati corrente();
For( i = 2, i <= 100, i++,
dtSplit/*###*/ < );
2° problema: le righe eliminate devono essere multiple di 4 poiché ciascun dispositivo viene testato 4 volte.
Non sono esattamente sicuro di come farlo
apprezzerei davvero il tuo aiuto in questo senso
Grazie
new_2_JMP
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLSe stai controllando solo una singola cella:
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLIl tuo codice controlla solo la riga 7. Devi testare ogni riga
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLCIAO,
Sto cercando di fare un po' la stessa cosa.
Devo verificare se una cella è vuota e quindi eliminare la riga se sì.
Ho provato quanto segue:
dt << seleziona dove( Manca (Colonna( dt,"Valore" )[7] ) ) << elimina righe;
Ma cancella tutte le righe nella tabella.
Alla ricerca di idee.
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLOttima discussione. Abbiamo riscontrato un problema simile, in cui importando da file di sensori avevamo molte righe vuote alla fine del file. Volevamo rimuovere le righe in cui non erano presenti dati del sensore. Tuttavia, non volevo rimuovere le righe in cui c'erano ancora alcune informazioni.Di seguito è stato scritto in JMP14, ma penso che funzionerà con le versioni precedenti. In JMP14, so che c'è Selezione riga > Seleziona righe duplicate. Ma non è stato possibile trovare una funzione simile che sommasse tutte le colonne numeriche su una riga. Nello script seguente, Sum() restituirebbe un valore nullo su tutta la riga della matrice, ma io volevo uno zero. Trovato che l'output di V Sum() restituirebbe 0 per tutti i null. Per funzionare, dovevo semplicemente trasporre il vettore riga in un vettore colonna.Funziona indipendentemente dal numero di colonne numeriche che hai, purché siano tutte vuote. Sono ancora interessato se qualcuno ha una soluzione migliore.
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLUsare l'operatore di concatenazione era un errore di trascrizione: le vecchie abitudini sono dure a morire.
risulta che il problema erano i nomi delle mie colonne, che in realtà erano "88", "95" e "105", e l'utilizzo di Is Missing(:88) ha selezionato tutte le righe.
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
Funziona alla grande.
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLStavi utilizzando l'operatore di concatenazione di stringhe || invece dell'operatore OR |.Come ha mostrato MS, è necessario utilizzare la funzione Manca e non È Vuoto.Il tuo codice diventa:
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLMi spiace, non ho rispettato il requisito JMP9. La funzione Loc Nonmissing() sembra essere nuova in JMP 10, quindi quanto sopra non funziona in JMP 9.
Ecco un approccio alternativo che funziona in JMP 9, simile al tuo codice ma utilizzando un ciclo.
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Ri: Rimuovere le righe con uno o più valori vuoti utilizzando JSLCiò può essere realizzato in diversi modi. Per le colonne numeriche le funzioni di matrice spesso sono efficaci.
Ecco un esempio di eliminazione di tutte le righe con celle mancanti nelle colonne 2, 3 e 4:
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
Ecco un approccio alternativo creando un sottoinsieme di colonne senza celle mancanti (mantenendo invariata la tabella originale):
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Re: Rimuovere le righe con uno o più valori vuoti utilizzando JSLQuesto script inizierà a funzionare dopo la colonna intitolata "Nomi" e proseguirà fino alla fine della tabella eliminando le righe vuote.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);