列中时间与r之间的差异

时间:2017-06-26 10:18:34

标签: r time

我有一个数据框,其中有两列有进出时间,我试图在另一列中以秒为单位获得时差。

 ` ## intime ##     |s  ## outtime ##

 1. 6/20/2017 1:47  |s  6/20/2017 1:47
 2. 6/20/2017 3:32  |s  6/20/2017 3:32
 3. 6/20/2017 21:45 |s  6/20/2017 21:45
 4. 6/23/2017 0:15  |s 6/23/2017 0:15
 5. 6/17/2017 1:30  |s 6/17/2017 1:30`

我尝试使用

 `t<-c(m1$intime)
  t1<-c(m1$outime)
  dt <- as.POSIXct(t)
#Error in as.POSIXct.numeric(t) : 'origin' must be supplied
  dt <- as.POSIXct(t1)
#Error in as.POSIXct.numeric(t1) : 'origin' must be supplied`

尝试使用链接time difference giving error

中的代码

difftime(t2, t1) Error in as.POSIXlt.character(as.character(x), ...) : character string is not in a standard unambiguous format

不确定我哪里出错了。列是整数类型。

谢谢。

3 个答案:

答案 0 :(得分:0)

这里有几个问题。

如果您的列是整数,那么as.POSIXct会将它们解释为自特定时间以来的秒数,该时间由错误引用的origin参数定义。

如果您的列是字符但不是标准格式,则必须告诉as.POSIXct如何解释字符串的不同部分。

以下是?as.POSIXct的示例:

as.POSIXct("2011-03-27 01:30:00", format = "%Y-%m-%d %H:%M:%S")

如果您的列实际上看起来像"6/20/2017 1:47",那么您应该可以使用:

as.POSIXct("6/20/2017 1:47", format = '%m/%d/%Y %H:%M')

as.POSIXct(m1$intime, format = '%m/%d/%Y %H:%M')

但目前还不清楚你的专栏是如何整数的,看起来仍然像你发布的那样。

答案 1 :(得分:0)

错误表示您需要前进的一切。 as.POSIX*会给您一个错误,因为您没有标准日期格式。检查函数?strptime。另外,here是关于R

中日期的好文章

答案 2 :(得分:0)

> x=c("6/20/2017 1:47")
> library(lubridate)
> y=mdy_hm(x)
> y
[1] "2017-06-20 01:47:00 UTC"

所以按照给定的数据

df1$intime=mdy_hm(df1$intime)
df1$outtime-mdy_hm(df1$outime)
df$timefidd=difftime(df1$intime,df1$outtime,units='secs')