首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用tidyjson将JSON转换为data.frame

使用tidyjson将JSON转换为data.frame
EN

Stack Overflow用户
提问于 2021-09-15 08:44:40
回答 1查看 188关注 0票数 2

我有一个JSON文件,我想把它转换成一个表。使用jsonlite库很容易。但是,如果文件很大,那么转换需要大量的时间。所以我正在测试一个tidyjson,希望能加速这个过程。

我的JSON文件如下所示:

代码语言:javascript
运行
AI代码解释
复制
x = '[
    {
      "id": 1,
      "A": [
        {
          "B": "b1",
          "C": [
            "c1"
          ]
        }
      ]
    },
    {
      "id": 2,
      "A": [
        {
          "B": "b1",
          "C": [
            "c2"
          ]
        }
      ]
    }
]
'

我就是这么处理的:

代码语言:javascript
运行
AI代码解释
复制
library(tidyjson)
library(dplyr)
      
x %>% gather_array() %>%      
      spread_values(id = jstring("id")) %>%
      enter_object("A") %>% gather_array %>%
      spread_values(B = jstring("B")) %>%
      enter_object("C") %>% gather_array() %>%
      spread_values(C = jstring("C")) %>%
      select(id, B, C)

我得到的结果是:

代码语言:javascript
运行
AI代码解释
复制
 ..JSON   id    B     C    
  <chr>    <chr> <chr> <chr>
1 "\"c1\"" 1     b1    NA   
2 "\"c2\"" 2     b1    NA 

无法找出代码的错误所在,以及为什么它对C不起作用。任何帮助都是非常感谢的。

更新:预期输出:

代码语言:javascript
运行
AI代码解释
复制
 id    B     C    
 <chr> <chr> <chr>
1 1     b1    c1   
2 2     b1    c2

更新2: jsonlite way:

代码语言:javascript
运行
AI代码解释
复制
y = jsonlite::fromJSON(x)
cbind(id = y$id, do.call(rbind.data.frame, y$A))
   

  id  B  C
1  1 b1 c1
2  2 b1 c2

不确定在这种情况下它是否是使用jsonlite最快的方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 08:56:59

我们可以使用来自fromJSONjsonlite

代码语言:javascript
运行
AI代码解释
复制
library(jsonlite)
library(tidyr)
library(dplyr)
fromJSON(x) %>% 
   unnest_wider(A) %>%
   unnest(C) %>%
   unnest(C)

-output

代码语言:javascript
运行
AI代码解释
复制
# A tibble: 2 x 3
     id B     C    
  <int> <chr> <chr>
1     1 b1    c1   
2     2 b1    c2   

或者另一个选择是

代码语言:javascript
运行
AI代码解释
复制
library(reticulate)
library(rrapply)
py_run_string(paste0("x = ", x))
rrapply(py$x, how = 'bind')
  A.1.C A.1.B id
1    c1    b1  1
2    c2    b1  2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69196967

复制
相关文章
Python生成随机整数数组的实用方法
在编程中,生成随机整数数组是一项非常常见的任务。本文将介绍如何使用Python语言来生成随机整数数组,帮助读者掌握这一有用的编程技巧。通过实际的代码示例,我们将逐步指导读者完成生成随机整数数组的过程,并提供一些实际应用的建议。
华科云商小彭
2023/10/09
6740
Python生成随机整数数组的实用方法
Java随机生成前N个不重复的整数
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Random; /** 测试随机生成前N个不重复的整数 @author Administr
用户7999227
2021/09/23
1.5K0
使用pyplot生成随机漫步
如何用pyplot生成一个随机漫步 先创建一个random_walk.py from random import choice class RandomWalk: # 创建一个RandomWalk类 def __init__(self, points_num): # 随机漫步的步数 self.points_num = points_num self.x_value = [0] # 初始化x的坐标为0 self.y_value = [0
y191024
2022/09/20
2790
使用pyplot生成随机漫步
使用python3来生成安全的随机密码
最近1年自学了python,发现python的应用场景挺多,自己百度了加自己稍微修改,写了段可以随时生成指定长度的安全随机密码 #C:\Python36 #coding=utf-8 import string from random import choice passwd_length = int(input('The length of password: '))        #密码的长度 passwd_count = int(input('The number of password list
py3study
2020/01/06
1.1K0
random生成随机整数 python_python中的random函数
在 Python 中用于生成随机数的模块是 random,在使用前需要 import.
全栈程序员站长
2022/11/09
1.1K0
random生成随机整数 python_python中的random函数
使用js随机生成背景颜色
通过 Math.random() 属性可以随机生成一个数字,然后通过转化为十六进制的方法进行处理,下面就是随机生成 6 位数字的代码,并进行转化的代码。
子舒
2022/06/09
26.4K0
使用js随机生成背景颜色
Numpy使用-随机生成数据
在自己学习pandas和numpy库进行数据处理的过程,有时候会缺乏数据。虽然网上有很多的数据,但是需要时间去查找。
皮大大
2021/03/07
1.2K0
PHP rand() 函数随机整数。
  如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机整数。例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 rand(5, 15)。
睿儿网络郝刚
2020/09/16
2.6K0
使用Hashtable来检验随机数的随机性
1.首先是创建Hashtable,使用for循环和定义一个产生随机数的r,key值对应随机数的value值。
Java进阶者
2021/12/31
2400
使用Hashtable来检验随机数的随机性
使用mockjs 随机生成模拟接口数据
json-server模拟后端接口 https://cloud.tencent.com/developer/article/1541622
王小婷
2019/11/21
1.6K0
js随机生成一个[min,max]范围的整数,举一反三
如果是想带有小数的随机数,这里提供思路,产生两位数,然后将个位数转化为小数,十位数就是个位数,以此类推,这样就是有小数的啦。
啦啦啦啦
2023/02/27
1.4K0
双倍的分辨率,双倍的快乐
这个工具名为waifu2x,已经开源在GitHub上了,而且随着开源,基于waifu2x的第三方软件也逐渐多了起来,现在已经开发成了普通人也可以使用的软件了。waifu2x的主要功能就是处理动漫风格的图片使之分辨率和清晰度在一定程度上提高,最大提高两倍,因而为2x。
分享者
2022/05/17
3840
双倍的分辨率,双倍的快乐
使用java随机生成验证码
生成验证码图片 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序,可以防止:恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一特定注册用户,用特定程序暴力破解方式进行不断的登录尝试。实际上验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。 下面我们就来学习如何自动生成一个验证码图片,案例的源代码点击此处进行下载,具体如下:
全栈程序员站长
2022/06/30
1.2K0
使用RANDARRAY生成随机数数组
RANDARRAY函数返回随机数数组,可指定要填充随机数的行数和列数、最小值和最大值、以及是否返回整数或小数值,其语法为:
fanjy
2023/08/30
6290
使用RANDARRAY生成随机数数组
使用 RandomStringUtils 类来生成随机码/随机数 java生成指定范围的随机数
    /*         生成微信账号 8位的字符串 含有数字和字母      */     public String getRandomWeiChat(){         String str = "a0A0b1B2c1C3d2D1e3E2f4F3g5G7h4H6i5Ij4J9k5K6l6Lm7M7n8N8o9Op0PqQrRsStTuUv9VwWxXy8YzZ";         return RandomStringUtils.random(8, str);     }
bear_fish
2018/09/19
4.1K0
PHP生成随机数(昵称随机生成器)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128397.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/28
6.1K1
猜测1-100的随机整数
public static void main(String[] args) {
算法与编程之美
2023/01/03
9040
excel随机生成区间随机数
既然,这个函数只能生成随机整数,那么可不可以生成随机小数了?可以的,本次以随机生成小数点后一位小数为例,先输入公式=RANDBETWEEN(1,9),生成1~9的随机数,再除以10,即可得到这一结果,完整公式如下:=RANDBETWEEN(1,9)/10
似水的流年
2019/12/06
2.5K0
点击加载更多

相似问题

如何使用泊松来估计到达时间(生成随机整数)?

11

生成随机整数

42

生成随机整数

30

随机整数生成

10

使用随机长产生随机双倍

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档