将时间数据帧转换为数字数据

时间:2017-08-19 11:04:32

标签: r dataframe time numeric

我有一个时间格式的数据框。我需要将其更改为数字数据。 我使用以下格式,但我不确定它是否正确,因为值以数字格式更改。

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)

1 个答案:

答案 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的功能,如果你发现它很有用,则应该归功于他。