如何将日期/时间戳转换为日期变量,以便可以找到会议需要多长时间?

时间:2019-06-04 17:32:12

标签: r date

我正在做一个项目,我必须弄清楚会议要花多长时间。我有两列“ STARTDATE”和“ END DATE”,它们是字符变量。我想从开始日期中减去结束日期,以获取会议花费的时间

我尝试使用as.POSIXct来转换变量,但是它总是抛出错误。

STARTDATE                           ENDDATE
9  18-JAN-19 10.42.30.000000000 AM  18-JAN-19 11.01.24.000000000 AM
10 18-JAN-19 10.43.02.000000000 AM  18-JAN-19 11.02.42.000000000 AM
11 18-JAN-19 10.44.04.000000000 AM  18-JAN-19 11.05.57.000000000 AM
13 18-JAN-19 10.41.34.000000000 AM  18-JAN-19 10.53.21.000000000 AM

我尝试了

as.POSIXct(df$STARTDATE, format="%d-%b-%y %H:%M:%S")

我所能得到的

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

1 个答案:

答案 0 :(得分:2)

问题在于您的A= <input type="text" id="amp" onkeyup="tick(), redraw()" size="4"></input> 参数与实际的日期格式不匹配:

  1. 小时,分钟和秒用format代替.
  2. 您的数据既有毫秒数,又有AM / PM分隔符

数据(我修改了:的最后一个值以包含PM时间,因为它揭示了一个重要的边缘情况):

ENDDATE

如果您修复了df <- structure(list(STARTDATE = c("18-JAN-19 10.42.30.000000000 AM", "18-JAN-19 10.43.02.000000000 AM", "18-JAN-19 10.44.04.000000000 AM", "18-JAN-19 10.41.34.000000000 AM"), ENDDATE = c("18-JAN-19 11.01.24.000000000 AM", "18-JAN-19 11.02.42.000000000 AM", "18-JAN-19 11.05.57.000000000 AM", "18-JAN-19 10.53.21.000000000 PM")), class = "data.frame", row.names = c(NA, -4L)) 参数,然后将其应用于每个日期向量,则会发现它将其转换为POSIXct格式:

format

您会注意到,该格式列出了df$STARTDATE <- as.POSIXct(df$STARTDATE, format = "%d-%b-%y %I.%M.%OS %p") df$ENDDATE <- as.POSIXct(df$ENDDATE, format = "%d-%b-%y %I.%M.%OS %p") STARTDATE ENDDATE 1 2019-01-18 10:42:30 2019-01-18 11:01:24 2 2019-01-18 10:43:02 2019-01-18 11:02:42 3 2019-01-18 10:44:04 2019-01-18 11:05:57 4 2019-01-18 10:41:34 2019-01-18 22:53:21 class(df$STARTDATE) [1] "POSIXct" "POSIXt" 而不是%I.%M.%OS,因为%H.%M.%OS(01-12的小时数)必须与AM / PM时间一起使用,而不是{{1} }(小时数为0-23)。感谢M-M抓住了这个机会!

请参见%I

  

%p ...与%I而不是%H结合使用