我正在做一个项目,我必须弄清楚会议要花多长时间。我有两列“ 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
答案 0 :(得分:2)
问题在于您的A= <input type="text" id="amp" onkeyup="tick(), redraw()" size="4"></input>
参数与实际的日期格式不匹配:
format
代替.
数据(我修改了:
的最后一个值以包含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结合使用