gpt4 book ai didi

json - R:将 JSON 时间格式转换为 POSIX

转载 作者:行者123 更新时间:2023-12-04 05:59:47 26 4
gpt4 key购买 nike

我有一个放入数据框中的 JSON 字符串。我能够做到这一点,但我无法使用其中一个应用函数将所有时间字符串转换为 POSIX 格式。

here有关更多背景信息。

JSON 时间格式为:

%h-%m-%dT%H:%M:%S-

2012-01-29T17:00:45-11:00

假设我有一个数据框,如图所示:

    .Close    .High     .Low    .Open                      Time
1 5.517339 5.539509 5.404098 5.495318 2012-01-30T12:00:45+08:00
2 5.485943 5.521242 5.467357 5.467641 2012-01-30T11:00:45+08:00
str(x)
'data.frame': 2 obs. of 5 variables:
$ .Close: num 5.52 5.49
$ .High : num 5.54 5.52
$ .Low : num 5.4 5.47
$ .Open : num 5.5 5.47
$ Time : Factor w/ 2 levels "2012-01-30T12:00:45+08:00",..: 1 2

为了获得这些数据,我做了:
y = getURI(url5)
y
"[{\"close\":5.51465512590582,\"highest\":5.58424835532979,\"lowest\":5.51349813464496,\"open\":5.53871134631156,\"start_time\":\"2012-01-30T13:00:45+08:00\"},{\"close\":5.55283232755149,\"highest\":5.58422873584898,\"lowest\":5.40409845894964,\"open\":5.49531753804068,\"start_time\":\"2012-01-30T12:00:45+08:00\"}]"
x = fromJSON(y)
x = do.call(rbind,lapply(x,as.data.frame))

我想将 JSON 时间格式更改为 POSIX,所以首先我将摆脱那个 T 分隔符,然后合并它们,然后应用于每个。
jsontime = function ( data ) {
x = data
x$Time=as.character(x$Time)
x$Time = strsplit(x$Time,split="T")
a = x$Time[[1]][1]
b = x$Time[[1]][2]
x$Time = paste(a,b,sep=" ")
x$Time=as.POSIXlt(x$Time,origin="1970-01-01",tz="GMT")
return (x)
}

2012-01-29T22:00:45-07:00 现在变成了 2012-01-29 21:00:45

问题在于 a=x$time[[1]][1] 和 b = x$Time[[1]][2]。这些太具体了,如果我想将这些应用于数据框,我只会返回为所有这些设置的第一次。

关于如何正确编码的任何线索。

最佳答案

您可以使用 as.POSIXltformat参数(详见 as.Date。好吧,我不得不做 man strftime 才能看到日期规范(*nix 系统)):

x$Time <- as.POSIXlt(x$Time, format="%Y-%m-%dT%H:%M:%S", 
origin="1970-01-01",tz="GMT")

这完全无视 +08:00-07:00虽然(您当前的代码也是如此)-这是您的意图吗?

您可以使用 %z对于偏移量,但它不期望冒号,即 +0800-0700 .所以我们首先要去掉那个冒号:
# replace [+-]hh:mm with [+-]hhmm for timezone offset
# i.e. 2012-01-30T12:00:45+08:00 -> 2012-01-30T12:00:45+0800
x$Time <- gsub('([-+][0-9]{2}):([0-9]{2})$','\\1\\2',x$Time)
# do as.POSIXlt with %z
x$Time <- as.POSIXlt(x$Time, format="%Y-%m-%dT%H:%M:%S%z",
origin="1970-01-01",tz="GMT")

这正确地将偏移量添加到时间。

关于json - R:将 JSON 时间格式转换为 POSIX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com