colClasses дата и время чтения.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

Это происходит из файла csv. Я относительно новичок в R, поэтому я попытался

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

И используя POSIXlt, а также POSIXct в аргументе colClasses, но я не могу создать один столбец или "переменную" из моих данных даты и времени. Я хочу сделать это, чтобы затем я мог выбирать произвольные временные рамки, на которых вычислять текущую статистику, такую как max, min, mean (а затем boxplots и т. д.).

Я также подумал, что мог бы преобразовать его в временной ряд и обойти его таким образом,

dataTS <-ts(data) 
Но я все еще могу использовать начало, конец и частоту в своих интересах. Спасибо за вашу помощь.
1 3

1 ответ:

Вы не можете сделать это при чтении данных в R с помощью аргумента colClasses, потому что данные занимают два "столбца" в CSV-файле. Вместо этого загрузите данные и обработайте столбцы date и time в одну переменную POSIXlt:

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"))

[я предполагаю, что это день месяца года??, Если не использовать "%Y%d%m %H:%M:%S"]

Что дает:

> 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" ...

Теперь вы можете удалить date и ' time, если хотите:

> 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