将 R 字符串拆分并转换为数值向量

发布于 2024-12-29 20:12:35 字数 2107 浏览 1 评论 0原文

我想转换以下 json 并将值放入数据框中。它几乎可以工作,但是 as.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-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 中指定一些内容来使其起作用吗?

编辑:

do.call(rbind,lapply(x,as.data.frame))

上面能够将其强制转换为数据帧,但时间戳列有两个因素。下一部分有自己的问题此处

y = do.call(rbind,lapply(x,as.data.frame))
str(x)
'data.frame':   2 obs. of  5 variables:
 $ close     : num  5.46 5.46
 $ highest   : num  5.47 5.46
 $ lowest    : num  5.46 5.46
 $ open      : num  5.46 5.46
 $ start_time: Factor w/ 2 levels "2012-01-29T21:48:24-05:00",..: 1 2

如果我尝试将我得到了 POSIX 格式

 x$start_time = as.POSIXct(x$start_time)
 x$start_time
[1] "2012-01-29 CST" "2012-01-29 CST"

但它丢失了时间数据。

I want to convert the following json and put the values into a data frame. It almost works but as.data.frame() puts everything into one row.

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

Instead of it being on one row. I want them in two rows.

   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

Is there something I can specify in as.data.table for this to work?

EDIT:

do.call(rbind,lapply(x,as.data.frame))

The above was able to coerce it into a data frame, but the time stamp column has two factors. This next part has its own question here

y = do.call(rbind,lapply(x,as.data.frame))
str(x)
'data.frame':   2 obs. of  5 variables:
 $ close     : num  5.46 5.46
 $ highest   : num  5.47 5.46
 $ lowest    : num  5.46 5.46
 $ open      : num  5.46 5.46
 $ start_time: Factor w/ 2 levels "2012-01-29T21:48:24-05:00",..: 1 2

If I try to convert the POSIX format I get

 x$start_time = as.POSIXct(x$start_time)
 x$start_time
[1] "2012-01-29 CST" "2012-01-29 CST"

But it loses the time data.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

战皆罪 2025-01-05 20:12:35

您可以尝试:

do.call(rbind,lapply(x,as.data.frame))

You might try:

do.call(rbind,lapply(x,as.data.frame))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文