10

这应该很快 - 我们在 R 中解析以下格式:

2013-04-05T07:49:54-07:00

我目前的做法是

require(stringr) 
timenoT <- str_replace_all("2013-04-05T07:49:54-07:00", "T", " ") 
timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S%z", tz="UTC")

但它给了NA

4

3 回答 3

16

%z是以小时为单位的有符号偏移量,格式为hhmm,而不是hh:mm。这是删除最后一个:.

newstring <- gsub("(.*).(..)$","\\1\\2","2013-04-05T07:49:54-07:00")
(timep <- strptime(newstring, "%Y-%m-%dT%H:%M:%S%z", tz="UTC"))
# [1] "2013-04-05 14:49:54 UTC"

另请注意,您不必删除"T".

于 2013-04-05T16:14:53.650 回答
1

你没有字符串替换。

NA 只是意味着整体没有工作,所以做它来构建你的表达:

R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%d") 
[1] "2013-04-05"
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M") 
[1] "2013-04-05 07:49:00"
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M:%S")
[1] "2013-04-05 07:49:54" 
R>

此外,由于我从未完全理解的原因 - 但可能与它底层的 C 库函数一起存在,%z仅适用于输出,而不是输入。因此,您的 NA 很可能来自您对%z.

于 2013-04-05T16:12:31.593 回答
0

strptime("2013-04-05 07:49:54-07:00", "%Y-%m-%d %H:%M:%S", tz="UTC")2013-04-05 07:49:54 UTC

尝试

timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S", tz="UTC")
于 2013-04-05T16:12:25.457 回答