2013-07-03 19 views
5

Ho un file .csv contenente 4 colonne di dati in una colonna di date/orari a intervalli di un minuto. Alcuni timestamp sono mancanti, quindi sto cercando di generare le date/orari mancanti e assegnare loro i valori NA nelle colonne Y. L'ho già fatto in precedenza con altri file .csv con esattamente la stessa formattazione, senza problemi. Il codice è:R/zoo: le voci dell'indice in "order.by" non sono univoche

# 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 = ",") 

miei dati simile a questa (per un intero anno, più o meno) dopo la conversione in POSIXct, che sembra andare bene:

    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 

Quando il "Convert to zoo" passo ottengo il seguente errore:

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 

ho controllato per le voci duplicate, ma ottenere risultati:

> anyDuplicated(har10) 
[1] 0 

Qualche idea? Non ho idea del motivo per cui sto ricevendo questo errore su questo file, ma ha funzionato per quelli precedenti. Grazie!


EDIT: forma riproducibile:

EDIT 2: è necessario rimuovere i dati/code, mi spiace!

+0

ho provato a installare a GMT, ma niente da fare. I dati sono stati registrati in JST (Japan Standard Time), quindi non esiste il DST. Inoltre, ho eseguito correttamente lo stesso codice su altri tre file .csv, con la stessa identica formattazione, incluso lo stesso intervallo di data/ora in un caso. Questo è quello che mi sta buttando - non so perché questo dovrebbe essere diverso. –

+0

Ho modificato il mio post originale per includere il mio file (link Dropbox) e il codice completo. Dovrò rimuoverlo dopo aver risolto il problema, però. –

+0

Provalo separatamente con la prima metà dei dati e la metà dei secondi e continua a farlo finché non riesci a riprodurre il problema con poche righe di dati. Quindi pubblica solo quello. –

risposta

8

anyDuplicated(har10) indica se sono state duplicate righe complete. zoo è un avviso sull'indice, quindi è necessario eseguire anyDuplicated(har10$HAR.TS). sum(duplicated(har10$HAR.TS)) mostrerà che ci sono quasi 9.000 datazioni duplicate. Il primo duplicato si trova intorno alla riga 311811, dove 10/08/19 13:10 viene visualizzato due volte.

+0

Grazie! Sono nuovo di R, ma non riesco a credere che fosse così semplice. Sto facendo i bagagli per il giorno, ma lo controllerò domani - penso che tu possa avere ragione. –

+0

Sì, questo funziona. Ancora una volta i miei dati sono pieni di errori e duplicati: fantastico! :(Grazie! –

1

E per gestire gli indici duplicati (vedi ?zoo e ?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)