我有一个时间格式的数据框。我需要将其更改为数字数据。 我使用以下格式,但我不确定它是否正确,因为值以数字格式更改。
Photoperiod
08:52:41
08:53:35
08:54:33
08:55:36
08:56:44
08:57:55
08:59:11
09:00:31
09:01:55
09:03:23
09:04:55
09:06:31
09:08:10
09:09:53
09:11:40
DF<- read.csv2(file="DF.csv")
DF.a <-as.POSIXct(DF, format = "%H:%M:%S")
library(data.table)
DF.B<- lapply(DF.a , function(x) as.numeric(as.ITime(x)) / 3600)
答案 0 :(得分:2)
昨天在SO in portuguese中提出了(非常)类似的问题。 Marcus Nunes的答案可能会给你想要的东西。
请注意,他调用函数HoraDecimal
,葡萄牙语为'DecimalHour'。
HoraDecimal <- function(x){
sum(unlist(lapply(strsplit(x, split=":"), as.numeric)) * c(1, 1/60, 1/3600))
}
x <- "02:20:00"
HoraDecimal(x)
[1] 2.333333
y <- "00:50:00"
HoraDecimal(y)
[1] 0.8333333
z <- "3:30:30"
HoraDecimal(z)
[1] 3.508333
我在评论部分提出了建议,使用sapply
代替unlist(lapply(...))
。以下是这样的版本。名称改为英文。
DecimalHour <- function(x){
sum(sapply(strsplit(x, split=":"), as.numeric) * c(1, 1/60, 1/3600))
}
DecimalHour(x)
DecimalHour(y)
DecimalHour(z)
转换方法是一样的,它仍然是Marcus的功能,如果你发现它很有用,则应该归功于他。