2017-04-21 5 views
0

Ich versuche, R zu verwenden, um Fehler in einem Dataset zu bestimmen. Der Datensatz besteht aus der Zeit in Sekunden in einer Spalte und ob ein "Run" in einer anderen Spalte aufgetreten ist. Eine "0" in der RunStart-Spalte zeigt den Beginn eines Laufs an, während eine "1" nur die Fortsetzung eines Laufs darstellt.Suche nach Fehlern in bekannten Mustern aus Daten in R?

In der folgenden Beispieltabelle sollten die Zeitintervalle in einem Lauf 10 Sekunden sein.

Ich möchte herausfinden, wann ein Lauf beginnt, wenn alle nachfolgenden Werte Vielfache von 10 Sekunden sind, und alle Zeilen bestimmen, bei denen dies nicht der Fall ist. In diesem Beispiel sind alle Zeilen korrekt, mit Ausnahme der Zeile 9, die einen Unterschied von 9 Sekunden zu Zeile 8 im selben Lauf aufweist. Wie kann ich Fehler wie Zeile 9 in einem großen Datensatz isolieren?

Time RunStart 
1 10  0 
2 20  1 
3 30  1 
4 101  0 
5 111  1 
6 121  1 
7 202  0 
8 212  1 
9 221  1 

Ich habe Probleme zu finden, wo man anfangen soll, ich bin derzeit die Suche in den „plyr“ -Paket und die Einführung in den Daten in R Dokument auf R Webseite Reinigung. Der vollständige Datensatz, in dem ich versuche, die Fehler zu finden, ist über 300 000 Zeilen.

Antwort

3

Mit dplyr können wir tun:

library(dplyr) 


df %>% 
    mutate(regular = RunStart == 0 | Time - lag(Time) == 10) 
#> Time RunStart regular 
#> 1 10  0 TRUE 
#> 2 20  1 TRUE 
#> 3 30  1 TRUE 
#> 4 101  0 TRUE 
#> 5 111  1 TRUE 
#> 6 121  1 TRUE 
#> 7 202  0 TRUE 
#> 8 212  1 TRUE 
#> 9 221  1 FALSE 
1

Sie können diff verwenden, um die Zeitunterschiede zu erhalten, überprüfen Sie, die keine Vielfachen von zehn sind, und passen Sie diese für Fortsetzungsdatensätze an.

intersect(which((c(0,diff(df$Time)) %% 10) != 0), 
     which(df$RunStart == 1)) 
[1] 9 
Verwandte Themen