<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Hallo zusammen,
Ich habe eine Protokolldatei der Temperatur in ungleichen Intervallen und der Dauer zwischen ihnen.
Ich möchte den Datensatz bereinigen, damit es nicht zu wiederholten Temperaturen und zu kurzen Intervallen zwischen denselben Temperaturmessungen kommt.
Um die Wiederholungen zu löschen, verwende ich folgenden Code:
Wiederholt = dt << reihen wo ( Verzögerung ( : Temperatur . 1 ) == : Temperatur ) ;
dt << Zeilen löschen ( wiederholt ) ;
Für die kurzen Sprünge zwischen gleichen Temperaturen verwende ich:
Springt = dt << reihen wo ( Und ( Verzögerung ( : Temperatur . 1 ) == Verzögerung ( : Temperatur . - 1 ) . : Dauer < 2 ) ) ;
dt << Zeilen löschen ( Springt ) ;
Dies geschieht wiederholt, da nach dem Reinigen der Sprünge neue Wiederholungen möglich sind und umgekehrt. Also benutze ich es in einer for-Schleife. Ich kann das immer übermäßig machen (ich setze eine hohe Zahl), aber es ist ineffizient.
Irgendwelche Vorschläge, um die Schleife so zu verbessern, dass sie stoppt, wenn keine Sprünge wiederholt werden?
Das gesamte Skript sieht folgendermaßen aus:
dt = Neue Tabelle ( "Logdatei" . Zeilen hinzufügen ( 500 ) ) ;
dt << Neue Spalte ( "Temperatur" .
Eigenschaft festlegen ( "Wert Farben" . { 1 = - 13977687 . 2 = - 3780931 . 3 = - 4222943 . 4 = - 13596966 . 5 = - 2211217 } ) .
Farbzelle nach Wert
) ;
Für jede Reihe ( dt : Temperatur = Zufällige ganze Zahl ( 5 ) ) ;
dt << Neue Spalte ( "Dauer" ) ;
Für jede Reihe ( dt : Dauer = Zufällige ganze Zahl ( 3 ) ) ;
// lösche sich wiederholende Zeilen und kurze Sprünge
Zum ( ich = 1 . ich <= 5 . ich ++
Wiederholt = dt << reihen wo ( Verzögerung ( : Temperatur . 1 ) == : Temperatur ) ;
dt << Zeilen löschen ( wiederholt ) ;
Springt = dt << reihen wo ( Und ( Verzögerung ( : Temperatur . 1 ) == Verzögerung ( : Temperatur . - 1 ) . : Dauer < 2 ) ) ;
dt << Zeilen löschen ( Springt ) ;
) ;
Ja, sie sind gleichwertig. Die Summe gibt immer eine Zahl zurück und JMP behandelt alle Nicht-Null-Zahlen als WAHR. Es ist also egal, ob der Test 1 oder 37 ergibt. Beide sind gleich WAHR.
Thaks @ms,
könntest du erklären, wie jmp liest N Row ( Wiederholt ) + N Row ( Springt ) als Testausdruck?
Ist es gleichbedeutend mit:
Oder ( N Row ( Wiederholt ) . N Row ( Springt )) > 0
ron
Sie könnten eine while-Schleife versuchen. Die untere Schleife sollte anhalten, wenn sowohl Wiederholungen als auch Sprünge leere Matrizen sind.
Springt = Wiederholt = [ 1 ] ;
Während ( N Row ( Wiederholt ) + N Row ( Springt ) .
Wiederholt = dt << reihen wo ( Verzögerung ( : Temperatur . 1 ) == : Temperatur ) ;
dt << Zeilen löschen ( wiederholt ) ;
Springt = dt << reihen wo ( Und ( Verzögerung ( : Temperatur . 1 ) == Verzögerung ( : Temperatur . - 1 ) . : Dauer < 2 )) ;
dt << Zeilen löschen ( Springt ) ;
) ;