我可以将包含小时,分钟或秒规格的字符串转换为difftime
:
> as.difftime("12 h", "%H")
Time difference of 12 hours
> as.difftime("12 m", "%M")
Time difference of 12 mins
> as.difftime("12 s", "%S")
Time difference of 12 secs
但是我不能使用星期说明,因为没有适当的格式…,尽管"weeks"
是difftime
的合法 unit
> as.difftime("12 w", "%…")
我在俯视什么吗?
答案 0 :(得分:0)
罗兰指出:
它不能工作超过几个小时。 ……很明显,如果您学习代码。相关的部分是
difftime(strptime(tim, format = format), strptime("0:0:0", format = "%X"), units = units)
。如果您仅为
strptime
指定时间,则会添加当前日期。
实际上,在 R控制台中研究代码很容易:
> as.difftime
function (tim, format = "%X", units = "auto")
{
if (inherits(tim, "difftime"))
return(tim)
if (is.character(tim)) {
difftime(strptime(tim, format = format), strptime("0:0:0",
format = "%X"), units = units)
}
else {
if (!is.numeric(tim))
stop("'tim' is not character or numeric")
if (units == "auto")
stop("need explicit units for numeric conversion")
if (!(units %in% c("secs", "mins", "hours", "days", "weeks")))
stop("invalid units specified")
.difftime(tim, units = units)
}
}
问题的症结在于,使用strptime
会使赋予as.difftime
的时间间隔字符串被视为时间点< / em>,从
当前天被减去。由于各种原因,这使得带有字符串的as.difftime
在几天和几周内无法使用,例如strptime
不接受0天的值,尽管它作为间隔是完全有效的。
R-devel邮件列表上的评论请求未引起广泛的响应。 (我从私人邮件中收到了来自Emil Bode的一些有价值的想法,因此在这里不再赘述。)因此,我将不建议对as.difftime
进行更改,因为更改它会引入R版本之间的差异。