<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Ciao a tutti,
Ho un file di registro della temperatura a intervalli impari e la durata tra di loro.
Voglio pulire il set di dati in modo che non ci siano temperature ripetute e intervalli brevi tra le stesse misurazioni della temperatura.
Per eliminare le ripetizioni, utilizzo il seguente codice:
ripetizioni = dt << ottenere righe dove ( Ritardo ( : Temperatura , 1 ) == : Temperatura ) ;
dt << cancella le righe ( ripete ) ;
Per i brevi salti tra le stesse temperature uso:
salti = dt << ottenere righe dove ( E ( Ritardo ( : Temperatura , 1 ) == Ritardo ( : Temperatura , - 1 ) , : Durata < 2 ) ) ;
dt << cancella le righe ( salti ) ;
questo viene fatto ripetutamente poiché una volta puliti i salti potrebbero esserci nuove ripetizioni e viceversa. Quindi lo uso in un ciclo for. Posso sempre farlo in modo eccessivo (impostando i su un numero elevato) ma è inefficiente.
Qualche suggerimento per migliorare il loop in modo che si fermi quando non ci sono ripetizioni di salti?
Lo script generale assomiglia a questo:
dt = Nuova tabella ( "File di registro" , Aggiungi righe ( 500 ) ) ;
dt << Nuova colonna ( "Temperatura" ,
Imposta proprietà ( "Colori valore" , { 1 = - 13977687 , 2 = - 3780931 , 3 = - 4222943 , 4 = - 13596966 , 5 = - 2211217 } ) ,
Colore cella per valore
) ;
Per ogni riga ( dt : Temperatura = Numero intero casuale ( 5 ) ) ;
dt << Nuova colonna ( "Durata" ) ;
Per ogni riga ( dt : Durata = Numero intero casuale ( 3 ) ) ;
// cancella file ripetute e salti corti
Per ( io = 1 , io <= 5 , io ++,
ripetizioni = dt << ottenere righe dove ( Ritardo ( : Temperatura , 1 ) == : Temperatura ) ;
dt << cancella le righe ( ripete ) ;
salti = dt << ottenere righe dove ( E ( Ritardo ( : Temperatura , 1 ) == Ritardo ( : Temperatura , - 1 ) , : Durata < 2 ) ) ;
dt << cancella le righe ( salti ) ;
) ;
Sì, sono equivalenti. La somma restituisce sempre un numero e JMP considera tutti i numeri diversi da zero come TRUE. Quindi non importa se il test restituisce 1 o 37. Entrambi sono ugualmente VERO.
Thaks @ms,
potresti spiegare come legge la jmp N Row ( ripetizioni ) + N Row ( salti ) come espressione di prova?
È equivalente a:
O ( N Row ( ripetizioni ) , N Row ( salti )) > 0
ron
Potresti provare un ciclo while. Il ciclo sottostante dovrebbe fermarsi quando sia Repeat che Salti sono matrici vuote.
salti = ripetizioni = [ 1 ] ;
Mentre ( N Row ( ripetizioni ) + N Row ( salti ) ,
ripetizioni = dt << ottenere righe dove ( Ritardo ( : Temperatura , 1 ) == : Temperatura ) ;
dt << cancella le righe ( ripete ) ;
salti = dt << ottenere righe dove ( E ( Ritardo ( : Temperatura , 1 ) == Ritardo ( : Temperatura , - 1 ) , : Durata < 2 )) ;
dt << cancella le righe ( salti ) ;
) ;