R json 多列

R json multiple columns

我有一个 json 现在看起来像这样:

[{"id":"123","symbol":"A","price":[5,3,1,2],"Value":[23,2,4,30]}, {"id":"334","symbol":"B","price":[6,2,2,2],"Value":[2,21,42,3]}]

我怎样才能将它变成一个包含两行的数据框,其中包含如下列:

id | symbol | price1 | price2 | price3 | price4 | value1 | value2 | value3 | value4

I have tried using fromJSON(jsondata) 

但它返回一个列表,绑定列表后,我得到例如一列价格,每个不同的价格作为不同的行返回。

我们可以使用 fromJSONjsonlite 转换为 data.frame,然后 unnestlist 元素转换为 'long' 格式。最好保持 'long' 格式

library(jsonlite)
library(tidyverse)
fromJSON(str1) %>% 
   unnest(c(price, Value)) %>%
   group_by(id, symbol) %>%
   mutate(ind = row_number()) %>% 
   pivot_wider(names_from = ind, values_from = c(price, Value))
# A tibble: 2 x 10
#  id    symbol price_1 price_2 price_3 price_4 Value_1 Value_2 Value_3 Value_4
#  <chr> <chr>    <int>   <int>   <int>   <int>   <int>   <int>   <int>   <int>
#1 123   A            5       3       1       2      23       2       4      30
#2 334   B            6       2       2       2       2      21      42       3

注意:pivot_wider 来自 tidyrdevel 版本 (‘0.8.3.9000’)


或者另一个选项是 dcast from data.table

df1 <- fromJSON(str1) %>% 
    unnest(c(price, Value))

library(data.table)
dcast(setDT(df1), id + symbol  ~rowid(id, symbol), value.var = c('price', 'Value'))
#    id symbol price_1 price_2 price_3 price_4 Value_1 Value_2 Value_3 Value_4
#1: 123      A       5       3       1       2      23       2       4      30
#2: 334      B       6       2       2       2       2      21      42       3

数据

str1 <- '[{"id":"123","symbol":"A","price":[5,3,1,2],"Value":[23,2,4,30]}, {"id":"334","symbol":"B","price":[6,2,2,2],"Value":[2,21,42,3]}]'