Json 拆分R字符串并将其转换为数字向量
我想转换以下json并将值放入数据帧中。它几乎可以工作,但是.data.frame()将所有内容放在一行中Json 拆分R字符串并将其转换为数字向量,json,r,curl,rcurl,Json,R,Curl,Rcurl,我想转换以下json并将值放入数据帧中。它几乎可以工作,但是.data.frame()将所有内容放在一行中 require(rjson) require(RCurl) y = getURI(url1) y [1] "[{\"close\":5.45836392962902,\"highest\":5.45837200714172,\"lowest\":5.45836392962902,\"open\":5.45837200714172,\"start_time\":\"2012-01-29T1
require(rjson)
require(RCurl)
y = getURI(url1)
y
[1] "[{\"close\":5.45836392962902,\"highest\":5.45837200714172,\"lowest\":5.45836392962902,\"open\":5.45837200714172,\"start_time\":\"2012-01-29T18:29:24-08:00\"},{\"close\":5.45837200714172,\"highest\":5.45837200714172,\"lowest\":5.45834791002201,\"open\":5.45835598753471,\"start_time\":\"2012-01-29T18:28:24-08:00\"}]"
x = fromJSON(y)
> str(x)
List of 2
$ :List of 5
..$ close : num 5.46
..$ highest : num 5.46
..$ lowest : num 5.46
..$ open : num 5.46
..$ start_time: chr "2012-01-29T18:29:24-08:00"
$ :List of 5
..$ close : num 5.46
..$ highest : num 5.46
..$ lowest : num 5.46
..$ open : num 5.46
..$ start_time: chr "2012-01-29T18:28:24-08:00"
as.data.frame(x)
close highest lowest open start_time close.1 highest.1 lowest.1 open.1 start_time.1
1 5.458364 5.458372 5.458364 5.458372 2012-01-29T18:29:24-08:00 5.458372 5.458372 5.458348 5.458356 2012-01-29T18:28:24-08:00
而不是在一排。我想要两排
close highest lowest open start_time
1 5.458364 5.458372 5.458364 5.458372 2012-01-29T18:29:24-08:00
2 5.458372 5.458372 5.458348 5.458356 2012-01-29T18:28:24-08:00
有什么我可以在as.data.table中指定的方法使其工作吗
编辑:
上面的代码可以将其强制转换为数据帧,但时间戳列有两个因素。下一部分有自己的问题
如果我尝试转换POSIX格式,我会得到
x$start_time = as.POSIXct(x$start_time)
x$start_time
[1] "2012-01-29 CST" "2012-01-29 CST"
但是它会丢失时间数据。您可以尝试:
do.call(rbind,lapply(x,as.data.frame))
当我这样做时,“开始时间”列有两个因素。知道如何以POSIX格式获取它吗?@Kevin
as.POSIXct
<代码>作为.POSIXlt?仔细阅读并挑选,我试过了。日期是正确的,但似乎去掉了时间。当我使用as.POSIXlt时,它给了我错误的时间。@Kevin这些函数不能读取大脑。我看不出你的时间格式。您必须告诉as.POSIXct
您的时间是如何格式化的,以便正确读取时间。我建议您仔细阅读?asPOSIXct
,特别注意strtime
。它是JSON的时间字符串格式
x$start_time = as.POSIXct(x$start_time)
x$start_time
[1] "2012-01-29 CST" "2012-01-29 CST"
do.call(rbind,lapply(x,as.data.frame))