/ / Час и минути в една колона в R - r

Час и минути в една колона в R - r

Имам проста рамка за данни. От което искам да добавя друга колона, която записва времето (часове и минути, в 24-часовия часовник). След това ще графирам тази колона срещу променлива. Тъй като датите са еднакви, аз се интересувам само от времето. Това съм опитвал досега.

a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
"05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)

a <- df1$a
b <- strptime(df1$b, "%d/%m/%Y %H:%M")
c <- as.numeric(df1$c)
hour <- as.numeric(format(b, "%H"))
min <- as.numeric(format(b, "%M"))
date <- format(b, "%x")
time <- hour + min

df2 <- data.frame(a, b, c, hour, min, date, time)

Бях посъветван тук да конвертирате мин и часове ръчно, като разделяте числата, преобразувайки ги в подобни единици и след това добавяйки. Обаче аз се боря като 5 am просто се внасят като 5.

Ако някой може да ме посъветва как бих могъл да го направя правилно, много бих го оценил.

Отговори:

4 за отговор № 1

Съществуват многобройни инструменти за преобразуване на дати и часове, както и цял набор от пакети за използване. Харесва ми да работя POSIXlt в този случай, тъй като можете да извлечете всяка информация, от която се нуждаете, просто като ги извлечете от списъка.

например:

a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
"05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)

df2 <- within(df1,{
posb <- as.POSIXlt(b,format="%d/%m/%Y %H:%M")
hours <- posb$hour
mins <- posb$min
dates <- format(posb, "%x")
time <- format(posb, "%H:%M")
posb <- NULL  # cleanup
})

Което дава :

> df2
a                b c  time     dates mins hours
1 1 05/12/2012 05:00 0 05:00 12/5/2012    0     5
2 2 05/12/2012 06:55 0 06:55 12/5/2012   55     6
3 3 05/12/2012 07:10 0 07:10 12/5/2012   10     7
4 4 05/12/2012 10:23 1 10:23 12/5/2012   23    10
5 5 05/12/2012 11:43 1 11:43 12/5/2012   43    11
6 6 05/12/2012 13:04 1 13:04 12/5/2012    4    13

За повече информация вижте също:

  • ?POSIXlt за повече информация за POSIXt класовете
  • ?format за повече информация относно опциите за форматиране
  • ?strptime за повече информация относно опциите за форматиране и преобразуването в характер
  • на lubridate пакет за алтернативни функции
  • на timeDate пакет за още повече алтернативни функции
  • ...