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)
但它返回一个列表,绑定列表后,我得到例如一列价格,每个不同的价格作为不同的行返回。
我们可以使用 fromJSON
从 jsonlite
转换为 data.frame
,然后 unnest
将 list
元素转换为 '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
来自 tidyr
的 devel
版本 (‘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]}]'
我有一个 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)
但它返回一个列表,绑定列表后,我得到例如一列价格,每个不同的价格作为不同的行返回。
我们可以使用 fromJSON
从 jsonlite
转换为 data.frame
,然后 unnest
将 list
元素转换为 '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
来自 tidyr
的 devel
版本 (‘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]}]'