【问题标题】:how to convert json to tibble如何将 json 转换为 tibble
【发布时间】:2021-05-04 01:06:31
【问题描述】:

我有以下 json 数据

{"data": {"cat1": ["value1", "value2", "value3", "value4", "value5"], "cat2": ["aaa", "bbb", "ccc"]},"info": ""}

我想将数据转换为以下内容。如何使用函数“fromJSON”来做到这一点

var1 var2 var3
data cat1 value1
data cat1 value2
data cat1 value3
data cat1 value4
data cat1 value5
data cat2 aaa
data cat2 bbb
data cat2 ccc
info

【问题讨论】:

  • 到目前为止你尝试了什么?出了什么问题?
  • 我只是不知道该怎么做。

标签: r tidyverse tibble jsonlite


【解决方案1】:

以下是使用jsonlite 包解决您的问题的基于tidyverse 的解决方案。在读取 .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  

【讨论】:

  • 非常感谢。我接受了你的回答。只是一个小问题,如果 cat1 或 cat2 的值超过 10 个,则代码“rowname = substr(rowname, 1, nchar(rowname) - 1)”会导致问题。你知道如何解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2021-08-11
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多