我有一个数据框,其中有两列有进出时间,我试图在另一列中以秒为单位获得时差。
` ## 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
不确定我哪里出错了。列是整数类型。
谢谢。
答案 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')