2016-05-01 32 views
5

Ho bisogno di aiuto con questo problema:Come scegliere i valori orari dal set di dati?

Ho un set di dati di valori del livello dell'acqua distribuiti ogni 30 minuti, ma ho bisogno solo dei valori orari. Ho provato con la funzione aggregate() ma a causa della funzione FUN è un requisito che determina che la mia analisi sia media o mediana e non voglio utilizzare alcuna funzione stat.

Questo esempio del mio frame di dati

06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996 
+1

Questo preleva ogni altra riga: 'DF [c (TRUE, FALSE),]' che inizia con la prima riga. –

+0

Grazie, va bene e mi ha aiutato! ma ho altri set di dati in cui il passo temporale è 1 minuto. Quindi in quel caso avrei bisogno dell'altro algoritmo per selezionare i valori orari. – FernRay

+0

Ho provato a farlo utilizzando questa funzione: – FernRay

risposta

2

Abbiamo convertire la colonna 'RefDateTimeRef' a POSIXct, estrarre il 'minuto', 'secondo' con format e confrontarla con 00:00 per restituire un vettore di logica, che usiamo per subsetare le righe.

df1[format(as.POSIXct(df1[,1], format = "%m/%d/%Y %H:%M"), "%M:%S")=="00:00",] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

O con lubridate

library(lubridate) 
df1[ minute(mdy_hm(df1[,1]))==0,] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

O con sub per rimuovere la stringa fino a quando la parte ora e quindi utilizzare == per ottenere il vettore di logica e sottoinsieme delle righe.

df1[ sub(".*\\s+\\S{2}:", "", df1[,1])=="00",] 

NOTA: Vi consiglio di non utilizzare sub o substr quanto a volte può portare a risposte sbagliate.

3
df <- read.table(text = '06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996') 

colnames(df) <- c('Date','Time','Value') 

index <- ifelse(substring(df$Time,4) == "00:00",T,F) 

final_df <- df[index,]