Mám jednoduchý dataframe. Z ktorého chcem pridať ďalší stĺpec, ktorý zaznamenáva čas (hodiny a minúty, v hodinách 24 hodín). Tento stĺpec potom budem grafovať proti premennej. Keďže dátumy sú rovnaké, zaujíma ma len čas. Toto som doteraz vyskúšala.
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)
Bolo mi odporučené tu manuálne konvertovať minúty a hodiny rozbitím čísel od seba, konverziou na podobné jednotky a potom pridaním. Avšak ja som zápasí ako 5 am jednoducho dostane dovezené ako 5.
Ak by mi niekto poradil, ako by som to mohol urobiť správne, veľmi by som to ocenil.
odpovede:
4 pre odpoveď č. 1Existujú početné konverzné nástroje pre dátumy a časy a celá sada balíkov, ktoré sa majú použiť. Mám rád prácu POSIXlt
v tomto prípade, pretože môžete extrahovať akékoľvek informácie, ktoré potrebujete, jednoducho ich extrahovaním zo zoznamu.
napr:
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
})
Čo dáva:
> 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
Ďalšie informácie nájdete aj v časti:
?POSIXlt
pre viac informácií o triedach POSIXt?format
pre viac informácií o možnostiach formátovania?strptime
pre viac informácií o možnostiach formátovania a konverzii na znak- na
lubridate
balíček pre alternatívne funkcie - na
timeDate
balíček pre ešte viac alternatívnych funkcií - ...