2012-12-06 3 views
3

Je lis dans un fichier CSV dans une variable "truc" et contraint la première colonne à POSIXct (cette colonne a seulement des horodateurs, de la forme "2012-12-04 17:49:52", donc cela fonctionne bien).Égalité POSIXct fonctionnant bizarrement

stuff[,1]<-as.POSIXct(stuff[,1]) 

Depuis que je suis une valeur de plusieurs jours de données, je puis essayer de casser des choses par jour:

control <- subset(stuff,as.Date(stuff[,1]) == '2012-11-27') 
control.1 <- subset(stuff,as.Date(stuff[,1]) == '2012-11-28') 

Je trouve que cela ne divise pas les données par dates que Je m'attendrais. queue (contrôle) me montre que la dernière valeur est à 2012-11-27 15:54:21, tandis que la tête (contrôle.1) montre que sa première valeur est 2012-11-27 16:04:35.

L'égalité semble donc pivoter autour de 16:00 pour une raison quelconque. J'ai essayé de spécifier des fuseaux horaires lors de la contrainte à POSIXct, mais cela n'a pas aidé non plus. Y at-il quelque chose que je peux faire pour sous-ensembles par jour (et y a-t-il une raison pour laquelle cela a échoué)? Je voudrais mentionner que je dois garder l'information horaire, puisque je prévois de l'utiliser pour découper les données par la suite.

+0

C'est à cause des fuseaux horaires. Vous pouvez spécifier timezone dans as.Date, par défaut c'est UTC donc quand vous convertissez vos horodatages en dates, certains tombent à des dates différentes. Assurez-vous que votre fuseau horaire dans as.Date correspond au fuseau horaire de votre fuseau horaire – ilya

+0

J'ai essayé de corriger les horodatages en disant 'stuff [, 1] <- as.Date (stuff [, 1], tzone =" PST ")' et en spécifiant les fuseaux horaires dans le contrôle d'égalité, mais j'ai obtenu les mêmes résultats. La chose intéressante est que j'obtiens le bon résultat si je le fais: 'contrôle <- sous-ensemble (cas, cas [, 1] <= as.POSIXct ('2012-11-27 23:59:59'))' – padips

Répondre

0

Peut-être cut pourrait vous être utile, mais il est difficile de dire avec certitude sans un échantillon de vos données qui reproduit le problème que vous rencontrez.

Voici un exemple minimal d'utilisation de cut pour créer vos sous-ensembles quotidiens.

set.seed(1) # So you can get the same numbers as I do 
MyDates <- ISOdatetime(2012, 1, 1, 0, 0, 0, tz = "GMT") + sample(1:500000, 100) 
class(MyDates) 
# [1] "POSIXct" "POSIXt" 
split(MyDates, cut(MyDates, breaks="1 day")) 
$`2012-01-01` 
[1] "2012-01-01 08:34:53 GMT" "2012-01-01 17:26:15 GMT" "2012-01-01 01:51:35 GMT" 
[4] "2012-01-01 14:59:28 GMT" "2012-01-01 03:14:25 GMT" "2012-01-01 09:48:56 GMT" 
[7] "2012-01-01 13:48:48 GMT" "2012-01-01 11:41:58 GMT" "2012-01-01 16:53:56 GMT" 
[10] "2012-01-01 19:54:00 GMT" "2012-01-01 08:11:02 GMT" 

$`2012-01-02` 
[1] "2012-01-02 12:52:35 GMT" "2012-01-02 04:00:41 GMT" "2012-01-02 04:36:26 GMT" 
[4] "2012-01-02 00:31:17 GMT" "2012-01-02 05:27:47 GMT" "2012-01-02 13:06:44 GMT" 
[7] "2012-01-02 23:16:05 GMT" "2012-01-02 01:51:43 GMT" "2012-01-02 09:59:46 GMT" 
:::: 
:::: 
:::: 
[13] "2012-01-05 10:25:04 GMT" "2012-01-05 20:34:21 GMT" "2012-01-05 11:56:40 GMT" 
[16] "2012-01-05 02:56:40 GMT" "2012-01-05 09:08:00 GMT" "2012-01-05 02:45:00 GMT" 
[19] "2012-01-05 12:09:45 GMT" "2012-01-05 14:42:59 GMT" "2012-01-05 16:35:56 GMT" 

$`2012-01-06` 
[1] "2012-01-06 06:08:22 GMT" "2012-01-06 04:46:31 GMT" "2012-01-06 11:12:12 GMT" 
[4] "2012-01-06 17:45:37 GMT" "2012-01-06 09:48:54 GMT" "2012-01-06 00:47:02 GMT" 
[7] "2012-01-06 06:46:24 GMT" "2012-01-06 01:33:21 GMT" "2012-01-06 03:53:53 GMT" 
[10] "2012-01-06 00:01:45 GMT" "2012-01-06 13:23:54 GMT" "2012-01-06 01:40:54 GMT" 
+0

Cela fonctionne très bien. Merci! – padips