答案 0 :(得分:0)
library(stringr)
# generate few rows of data
In <- c('143','1239')
Out <- c('1344','521')
df <- data.frame(cbind(In, Out), stringsAsFactors=FALSE)
# pad with zero if needed (e.g. 143 -> 0143)
df$In[str_length(df$In) == 3] <- paste(0,df$In[str_length(df$In) == 3], sep='')
df$Out[str_length(df$Out) == 3] <- paste(0,df$Out[str_length(df$Out) == 3], sep='')
df$In <- strptime(df$In, format='%H%M')
df$Out <- strptime(df$Out, format='%H%M')
df$diff <- df$In - df$Out
这给出了:
> df$diff
Time differences in hours
[1] -12.01667 7.30000
这是您要寻找的吗?
答案 1 :(得分:0)
如果我理解正确,OP将计算绝对时差,其中一天中的时间(忽略日期)以字符串形式给出HMM
或HHMM
。
有些类直接支持一天中的时间(无日期),例如hms
程序包或ITime
程序包的data.table
类。
作为另一个挑战,没有以标准时间格式HH:MM
,例如09:43
给出时间戳。
这是在字符串填充后使用as.ITime()
的一种方法。
# create sample data frame
df <- data.frame(In = c("143", "1239"),
Out = c("1344", "521"))
library(magrittr) # piping is used for readability
# pad strings and coerce to ITime class
df$In %<>%
stringr::str_pad(4L, pad = "0") %>%
data.table::as.ITime("%H%M")
df$Out %<>%
stringr::str_pad(4L, pad = "0") %>%
data.table::as.ITime("%H%M")
# compute absolute difference
df$absdiff <- abs(df$In - df$Out)
df
In Out absdiff 1 01:43:00 13:44:00 12:01:00 2 12:39:00 05:21:00 07:18:00
现在,OP似乎期望得到与输入值相同的非标准格式HHMM
(没有:
字段分隔符)的结果。这可以通过
df$absdiff %>%
as.POSIXct() %>%
format("%H%M")
[1] "1201" "0718"