将字符数据帧列转换为小数时间

时间:2018-04-17 02:03:37

标签: r time apply

我有一个数据框,其中包含时间值的列在" HH:MM:SS"格式。我写了一个函数将其转换为小数值

convertTime = function(ttime){
  ttime2 =strsplit(ttime,":")
  h = as.numeric(ttime2[[1]][1])
  m = as.numeric(ttime2[[1]][2])
  hh = h + m/60
  return(hh/24)
}

convertTime("11:30:00")
  

[1] 0.4791667

这很好用。但是,当我尝试将其应用于整个列时,我收到错误:

data = data.frame(c("17:30:00", "13:00:00", "19:30:00"))
colnames(data) = c("timeString")
decimalTime = apply(data$timeString, 2, convertTime)
  

申请时出错(dat $ gameTime,2,convertTime):         dim(X)必须具有正长度

也许我没有正确使用apply函数。无论如何,如果你能指出我做错了什么,我将不胜感激!

1 个答案:

答案 0 :(得分:2)

基于该功能,我们可以遍历元素然后应用

sapply(as.character(data$timeString), convertTime)
#  17:30:00  13:00:00  19:30:00 
#0.7291667 0.5416667 0.8125000 

不是在函数外部执行sapply循环,而是可以更改函数

convertTime2 <- function(ttime) {
  ttime2 <- strsplit(ttime,":")
   sapply(ttime2, function(x) {x1 <- as.numeric(x)
             (x1[1] + x1[2]/60)/24
              })
 }

convertTime2("11:30:00")
#[1] 0.4791667
convertTime2(as.character(data$timeString))
#[1] 0.7291667 0.5416667 0.8125000

apply无效,因为data$timeStringvector或数据集列,而apply需要维对象,即matrix或{{1} }}。