Разбить и преобразовать символьную строку R в числовой вектор - PullRequest
0 голосов
/ 30 января 2012

Я хочу преобразовать следующий 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, чтобы это работало?

EDIT:

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"

Но он теряет данные о времени.

1 Ответ

2 голосов
/ 30 января 2012

Вы можете попробовать:

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