问题描述
我有以下json数据
{"data": {"cat1": ["value1","value2","value3","value4","value5"],"cat2": ["aaa","bbb","ccc"]},"info": ""}
我想将数据转换为以下内容。我如何使用函数“fromJSON”来做到这一点
var1 | var2 | var3 |
---|---|---|
数据 | cat1 | value1 |
数据 | cat1 | value2 |
数据 | cat1 | value3 |
数据 | cat1 | value4 |
数据 | cat1 | value5 |
数据 | cat2 | aaa |
数据 | cat2 | bbb |
数据 | cat2 | ccc |
信息 |
解决方法
以下是使用 tidyverse
包针对您的问题的基于 jsonlite
的解决方案。在读取 .JSON 文件时,分解 fromJSON
创建的列表结构非常容易。其余部分是 tidyverse
功能的应用程序。请注意,Test.json
文件包含您提供的数据。
代码
cols = c("var1","var2","var3")
A <- fromJSON("Test.json")
B <- A %>%
unique %>%
unlist %>%
as.data.frame %>%
tibble::rownames_to_column() %>%
mutate(rowname = substr(rowname,1,nchar(rowname) - 1),var1 = c(rep(names(A)[1],length(rowname) - 1),names(A)[2])) %>%
rename(!!cols[1] := var1,!!cols[2] := rowname,!!cols[3] := .) %>%
select(var1,var2,var3)
输出
var1 var2 var3
1 data cat1 value1
2 data cat1 value2
3 data cat1 value3
4 data cat1 value4
5 data cat1 value5
6 data cat2 aaa
7 data cat2 bbb
8 data cat2 ccc
9 info