Vraag converteren karakter naar tijd in R


In het volgende gegevensframe is de kolom 'tijd' character

id<-c(1,2,3,4)
time<-c("00:00:01","01:02:00","09:30:01","14:15:25")
df<-data.frame(id,time)

Ik vraag me af hoe ik het kan omzetten time zodat ik er rekenkundige berekeningen op kan uitvoeren.


21
2017-08-20 08:28


oorsprong


antwoorden:


Gebruik de functie chron in pakket chron:

time<-c("00:00:01", "01:02:00", "09:30:01", "14:15:25")

library(chron)
x <- chron(times=time)

x
[1] 00:00:01 01:02:00 09:30:01 14:15:25

Doe wat nuttige dingen, zoals het berekenen van het verschil tussen opeenvolgende elementen:

diff(x)
[1] 01:01:59 08:28:01 04:45:24

chron objecten slaan de waarden intern op als een fractie van seconden per dag. Dus 1 seconde is gelijk aan 1/(60*60*24)of 1/86400, i.e. 1.157407e-05.

Dus om tijden toe te voegen, is een eenvoudige optie dit:

x + 1/86400
[1] 00:00:02 01:02:01 09:30:02 14:15:26

28
2017-08-20 08:33



Met base R kun je het omzetten naar een object van klasse POSIXct, maar dit voegt een datum toe aan de tijd:

id<-c(1,2,3,4)
time<-c("00:00:01","01:02:00","09:30:01","14:15:25")
df<-data.frame(id,time,stringsAsFactors=FALSE)

as.POSIXct(df$time,format="%H:%M:%S")
[1] "2012-08-20 00:00:01 CEST" "2012-08-20 01:02:00 CEST"
[3] "2012-08-20 09:30:01 CEST" "2012-08-20 14:15:25 CEST"

Maar dat staat je toe om rekenkundige berekeningen op ze uit te voeren.


13
2017-08-20 08:36



Een ander mogelijk alternatief zou kunnen zijn:

time <- c("00:00:01","01:02:00","09:30:01","14:15:25")
converted.time <- as.difftime(time, units = "mins") #"difftime" class
secss <- as.numeric(converted.time, units = "secs")
hourss <- as.numeric(converted.time, units = "hours")
dayss <- as.numeric(converted.time, units="days")

Of zelfs:

w <- strptime(x = time, format = "%H:%M:%S") #"POSIXlt" "POSIXt" class

2
2017-10-02 01:24