6
votes

R as.posixcct () déposer des heures minutes et secondes

J'essaie d'expérimenter R pour analyser certaines données de mesure. J'ai un fichier .csv contenant plus de 2 millions de lignes de mesure. Voici un exemple:

2014-10-22 21:07:03+00:00,7432442.0
2014-10-22 21:07:21+00:00,7432443.0
2014-10-22 21:07:39+00:00,7432444.0
2014-10-22 21:07:57+00:00,7432445.0
2014-10-22 21:08:15+00:00,7432446.0
2014-10-22 21:08:33+00:00,7432447.0
2014-10-22 21:08:52+00:00,7432448.0
2014-10-22 21:09:10+00:00,7432449.0
2014-10-22 21:09:28+00:00,7432450.0


1 commentaires

Je ne peux pas reproduire le problème avec les données que vous avez fournies. Pouvez-vous trouver un exemple reproductible ? En outre, quelle version de r et quel OS utilisez-vous?


3 Réponses :


8
votes

Peut-être que la raison de votre problème est que vous avez des dates sans temps quelque part dans votre ensemble de données. Essayez l'exemple suivant: xxx pré>

Il crée d'abord un vecteur dates code> contenant 6 dates avec des temps et les convertit en caractères. Ensuite, j'ajoute une autre date (en tant que personnage) qui ne contient pas de temps. Lorsque vous exécutez les deux conversions vers POSIXCT CODE>, vous remarquerez que les temps sont partis dans le résultat, dès que vous inclurez la date sans temps. P>

donc il semble donc qu'il semble donc Ne soyez pas une date sans temps dans les premières lignes de vos données, mais plus tard là-bas sera peut-être. Il y a probablement de nombreuses solutions à ce problème et je vais simplement proposer un qui s'est venu à mon esprit. P>

La première étape consiste à modifier votre commande de lecture, de sorte que les dates sont stockées comme des caractères au lieu de facteurs au lieu de facteurs. : P>

data$V1 <- ifelse(nchar(data$V1) > 11,data$V1, paste0(data$V1,"00:00:00"))
data$V1 <- as.POSIXct(data$V1)


0 commentaires

3
votes

Vous pouvez essayer le code ci-dessous.
Ça va:

  • Lire le type DateTime comme personnage au lieu du facteur li>
  • mise à jour par référence em> li> ul>

    p>

    data[, .SD, by = .(year(V1),month(V1),mday(V1))]
    


7 commentaires

@JDEPYPEE Avez-vous utilisé d'autres fonctions d'arrondi de niveau inférieur à celle indiquée Année, mois, jour ?


Sans aucune fonction d'arrondi (uniquement votre premier bloc de code), les temps sont supprimés lorsque je imprime une entrée entière.


@jdepypere Avez-vous essayé des options ("chiffres.secs") ? Ceci peut être associé: Stackoverflow.com/a/7730759/2490497


J'ai le même problème et la lecture des réponses et des commentaires ne semble pas que le problème a été résolu (les solutions ne travaillaient dans aucun cas). Pourquoi avez-vous marqué @jangorecki des réponses comme "acceptée"? Avez-vous résolu le problème?


@RATNANIL Avez-vous essayé as.posixcct (AS.Character (.)) ? facteur et les entiers interne


@jangorecki Oui, j'ai essayé ça, mais cela n'a pas résolu le problème. Les valeurs temporelles sont supprimées si je transformez l'ensemble de 300 000 rangées. Si je sous-couche de 19704 ou moins, les valeurs de temps sont conservées. Bien sûr? Je travaille sur un exemple minimal, ce qui se révèle difficile depuis que je n'arrive pas à reproduire l'erreur avec des données synthétiques. Je poserai à nouveau cette question dans un nouveau post, si je ne peux pas trouver de travail.


@jangorecki s'avère que La réponse de Stibu était La solution pour moi! La valeur numéro 19705 était une valeur de date sans une composante "Time" .: - /



5
votes

J'ai eu un problème similaire avec as.posixlt (x) déposer le heure: minute: secondes informations, avec x étant un vecteur des objets posixct , qui sont arrivés à avoir tzone = "utc." .

Toutefois, as.posixlt (x, tz = "utc.") gardé le heure: minute: secondes Informations.


0 commentaires