2011-03-09 6 views
3

J'ai des données de la forme:Date de colClasses et le temps read.csv

date,time,val1,val2 
20090503,0:05:12,107.25,1 
20090503,0:05:17,108.25,20 
20090503,0:07:45,110.25,5 
20090503,0:07:56,106.25,5 

qui provient d'un fichier csv. Je suis relativement nouveau à R, alors j'ai essayé

data <-read.csv("sample.csv", header = TRUE, sep = ",") 

et en utilisant POSIXlt, ainsi que POSIXct dans l'argument colClasses, mais je ne peux pas l'air d'être en mesure de créer une colonne ou « variable » de ma date et données de temps. Je veux le faire, je peux donc choisir des périodes arbitraires sur lesquelles calculer des statistiques de fonctionnement telles que max, min, mean (et ensuite boxplots, etc.).

Je pensais aussi que je pourrais le convertir en une série de temps et obtenir autour de cette façon,

dataTS <-ts(data) 

mais ont encore été en mesure d'utiliser le début, la fin et la fréquence à mon avantage. Merci de votre aide.

Répondre

8

Vous ne pouvez pas le faire en lisant les données dans R en utilisant l'argument colClasses car les données s'étendent sur deux "colonnes" dans le fichier CSV. Au lieu de cela, charger les données et traiter les date et time colonnes en une seule POSIXlt variable:

dat <- read.csv(textConnection("date,time,val1,val2 
           20090503,0:05:12,107.25,1 
           20090503,0:05:17,108.25,20 
           20090503,0:07:45,110.25,5 
           20090503,0:07:56,106.25,5")) 
dat <- within(dat, Datetime <- as.POSIXlt(paste(date, time), 
              format = "%Y%m%d %H:%M:%S")) 

[Je présume qu'il est année mois jour ??, sinon utilisez "%Y%d%m %H:%M:%S"]

Ce qui donne:

> head(dat) 
     date time val1 val2   Datetime 
1 20090503 0:05:12 107.25 1 2009-05-03 00:05:12 
2 20090503 0:05:17 108.25 20 2009-05-03 00:05:17 
3 20090503 0:07:45 110.25 5 2009-05-03 00:07:45 
4 20090503 0:07:56 106.25 5 2009-05-03 00:07:56 
> str(dat) 
'data.frame': 4 obs. of 5 variables: 
$ date : int 20090503 20090503 20090503 20090503 
$ time : Factor w/ 4 levels "0:05:12","0:05:17",..: 1 2 3 4 
$ val1 : num 107 108 110 106 
$ val2 : int 1 20 5 5 
$ Datetime: POSIXlt, format: "2009-05-03 00:05:12" "2009-05-03 00:05:17" ... 

vous pouvez maintenant supprimer date et `temps si vous le souhaitez:

> dat <- dat[, -(1:2)] 
> head(dat) 
    val1 val2   Datetime 
1 107.25 1 2009-05-03 00:05:12 
2 108.25 20 2009-05-03 00:05:17 
3 110.25 5 2009-05-03 00:07:45 
4 106.25 5 2009-05-03 00:07:56