2013-07-03 12 views
5

Ich habe eine CSV-Datei mit 4 Spalten von Daten gegen eine Spalte von Daten in Abständen von einer Minute. Einige Zeitstempel fehlen, daher versuche ich die fehlenden Daten/Zeiten zu generieren und weise ihnen NA-Werte in den Y-Spalten zu. Ich habe dies zuvor mit anderen .csv-Dateien mit genau der gleichen Formatierung getan, ohne Probleme. Der Code ist:R/zoo: Indexeinträge in "order.by" sind nicht eindeutig

# read the csv file 
har10 = read.csv(fpath, header=TRUE); 

# set date 
har10$HAR.TS<-as.POSIXct(har10$HAR.TS,format="%y/%m/%d %H:%M") 

# convert to zoo 
df1.zoo<-zoo(har10[,-1],har10[,1]) #set date to Index 

# merge and generate NAs 
df2 <- merge(df1.zoo,zoo(,seq(start(df1.zoo),end(df1.zoo),by="min")), all=TRUE) 

# write zoo object to .csv file in Home directory 
write.zoo(df2, file = "har10fixed.csv", sep = ",") 

Meine Daten sieht wie folgt aus (für ein ganzes Jahr, mehr oder weniger) nach der Umwandlung in POSIXct, was in Ordnung zu gehen scheint:

    HAR.TS  C1  C2   C3  C4 
1  2010-01-01 00:00:00 -4390.659 5042.423 -2241.6344 -2368.762 
2  2010-01-01 00:01:00 -4391.711 5042.056 -2241.1796 -2366.725 
3  2010-01-01 00:02:00 -4390.354 5043.003 -2242.5493 -2368.786 
4  2010-01-01 00:03:00 -4390.337 5038.570 -2242.7653 -2371.289 

Als ich die „konvertieren Zoo“Schritt bekomme ich folgende Fehlermeldung:

Warning message: 
In zoo(har10[, -1], har10[, 1]) : 
    some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique 

ich habe für duplizierte Einträge überprüft, aber keine Ergebnisse erhalten:

> anyDuplicated(har10) 
[1] 0 

Irgendwelche Ideen? Ich habe keine Ahnung, warum ich diesen Fehler bei dieser Datei bekomme, aber es hat für frühere funktioniert. Vielen Dank!


EDIT: Reproduzierbare Form:

EDIT 2: Haben Sie die Daten/Code zu entfernen, sorry!

+0

Ich habe versucht, zu handhaben, es zu GMT Einstellung, aber keine Würfel. Die Daten wurden in JST (Japan Standard Time) aufgezeichnet, daher gibt es keine Sommerzeit. Ich habe auch den gleichen Code auf drei anderen .csv-Dateien mit genau der gleichen Formatierung, einschließlich der gleichen Datum/Uhrzeit-Bereich in einem Fall erfolgreich ausgeführt. Das wirft mich - ich weiß nicht, warum das anders sein sollte. –

+0

Ich habe meinen ursprünglichen Post bearbeitet, um meine Datei (Dropbox-Link) und den vollständigen Code einzuschließen. Ich muss es entfernen, nachdem ich das Problem gelöst habe. –

+0

Versuchen Sie es mit der ersten Hälfte der Daten und der zweiten Hälfte der Daten getrennt und machen Sie das so lange, bis Sie das Problem mit nur wenigen Datenzeilen reproduzieren können. Dann poste genau das. –

Antwort

8

anyDuplicated(har10) teilt Ihnen mit, wenn komplette Zeilen dupliziert sind. Zoo warnt vor dem Index, also sollten Sie anyDuplicated(har10$HAR.TS) ausführen. sum(duplicated(har10$HAR.TS)) wird zeigen, dass es fast 9.000 doppelte Datumsangaben gibt. Das erste Duplikat befindet sich in Zeile 311811, wobei 10/08/19 13:10 zweimal angezeigt wird.

+0

Danke! Ich bin immer noch neu bei R, aber ich kann nicht glauben, dass es so einfach war. Ich packe jetzt für den Tag ein, werde es aber morgen überprüfen - ich denke, du hast recht. –

+0

Ja, das funktioniert. Meine Daten sind wieder einmal voller Fehler und Duplikate - fantastisch! :(Vielen Dank! –

1

und duplizierte Indizes (siehe ?zoo und ?aggregate.zoo)

## zoo series with duplicated indexes 
z3 <- zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5)) 
plot(z3) 

## remove duplicated indexes by averaging 
lines(aggregate(z3, index, mean), col = 2, type = "o") 

## or by using the last observation 
lines(aggregate(z3, index, tail, 1), col = 4) 
Verwandte Themen