Имам проста рамка за данни. От което искам да добавя друга колона, която записва времето (часове и минути, в 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
пакет за още повече алтернативни функции - ...