Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R生成嵌套JSON_R_Arrays_Json_Object_Jsonlite - Fatal编程技术网

使用R生成嵌套JSON

使用R生成嵌套JSON,r,arrays,json,object,jsonlite,R,Arrays,Json,Object,Jsonlite,我试图使用R生成一个嵌套的JSON文件,但在设置它时遇到了困难。无可否认,我对JSON非常陌生,所以在概念上我落后了。我将感谢任何帮助-包括建议的地方(而不是R),这将使这项任务更容易 我有3个数据集,我正在工作-所有连接通过键。本质上,我的目标是创建一个包含患者对象的JSON文件,其中包含嵌套的遭遇&在这些遭遇中,包含嵌套的索赔行 以下是R中的设置: patients <- data.frame ( PatientID = c('PID01',

我试图使用R生成一个嵌套的JSON文件,但在设置它时遇到了困难。无可否认,我对JSON非常陌生,所以在概念上我落后了。我将感谢任何帮助-包括建议的地方(而不是R),这将使这项任务更容易

我有3个数据集,我正在工作-所有连接通过键。本质上,我的目标是创建一个包含患者对象的JSON文件,其中包含嵌套的遭遇&在这些遭遇中,包含嵌套的索赔行

以下是R中的设置:

patients <- data.frame (
                      PatientID = c('PID01','PID02'),
                      PatientName = c('John Doe','Jane Doe'),
                      PatientGroup = c('Group A','Group B')
                    )

encounters <- data.frame (
                          EncounterID = c('Enc01','Enc02','Enc03','Enc04','Enc05'),
                          PatientID = c('PID01','PID01','PID02','PID02','PID02'),
                          EncounterType = c('Outpatient','Outpatient','Inpatient','Outpatient','SNF')
                         )

encounterLines <- data.frame (
                              EncounterID = c(rep('Enc01',5),rep('Enc04',2)),
                              RevCodes = c('001','100','200','300','400','001','100'),
                              ClaimLine = c(seq(1:5),seq(1:2))
                              )

 ----------------------------------------
 PatientID   PatientName   PatientGroup 
----------- ------------- --------------
   PID01      John Doe       Group A    

   PID02      Jane Doe       Group B    
----------------------------------------

-----------------------------------------
 EncounterID   PatientID   EncounterType 
------------- ----------- ---------------
    Enc01        PID01      Outpatient   

    Enc02        PID01      Outpatient   

    Enc03        PID02       Inpatient   

    Enc04        PID02      Outpatient   

    Enc05        PID02          SNF      
-----------------------------------------

------------------------------------
 EncounterID   RevCodes   ClaimLine 
------------- ---------- -----------
    Enc01        001          1     

    Enc01        100          2     

    Enc01        200          3     

    Enc01        300          4     

    Enc01        400          5     

    Enc04        001          1     

    Enc04        100          2     
------------------------------------
任何/所有的帮助都将不胜感激。正如我前面提到的,我并不反对在R之外使用工具


谢谢

这似乎非常接近

库(tidyverse)
图书馆(jsonlite)
json%mutate_if(is.factor,as.character),
遇到%>%mutate_if(is.factor,as.character),
遇到行%>%
如果(is.factor,as.character)%>%,则进行变异
分组人(遇到)%>%
嵌套()%>%
重命名(索赔行=数据)%>%
突变(索赔线=映射(索赔线,转置)),
左联合)%>%
嵌套(Conferences=c(ConferenceId,ConferenceType,ClaimLines))%>%
转置()%>%
toJSON(pretty=TRUE)
#[
#  {
#“PatientID”:[“PID01”],
#“PatientName”:[“John Doe”],
#“患者组”:[“A组”],
#“遭遇”:[
#      {
#“遭遇”:“Enc01”,
#“遭遇类型”:“门诊”,
#“索赔”:[
#          {
#“RevCodes”:[“001”],
#“索赔线”:[1]
#          },
#          {
#“RevCodes”:[“100”],
#“索赔线”:[2]
#          },
#          {
#“RevCodes”:[“200”],
#“索赔线”:[3]
#          },
#          {
#“RevCodes”:[“300”],
#“索赔线”:[4]
#          },
#          {
#“RevCodes”:[“400”],
#“索赔线”:[5]
#          }
#        ]
#      },
#      {
#“遭遇”:“Enc02”,
#“遭遇类型”:“门诊”,
#“索赔”:{}
#      }
#    ]
#  },
#  {
#“PatientID”:[“PID02”],
#“PatientName”:[“Jane Doe”],
#“患者组”:[“B组”],
#“遭遇”:[
#      {
#“遭遇”:“Enc03”,
#“遭遇类型”:“住院患者”,
#“索赔”:{}
#      },
#      {
#“遭遇”:“Enc04”,
#“遭遇类型”:“门诊”,
#“索赔”:[
#          {
#“RevCodes”:[“001”],
#“索赔线”:[1]
#          },
#          {
#“RevCodes”:[“100”],
#“索赔线”:[2]
#          }
#        ]
#      },
#      {
#“遭遇”:“Enc05”,
#“遭遇类型”:“SNF”,
#“索赔”:{}
#      }
#    ]
#  }
#]
#

关键是首先创建一个合适的嵌套
列表
(使用多个
purrr::transpose
s),然后使用
jsonlite::toJSON
将其正确转换为嵌套的JSON

两个
数据。表
连接,您也可以到达那里

库(data.table)
setDT(患者)
setDT(遭遇战)
setDT(遭遇线)
##通过放置
##遭遇战

谢谢!不过,我得到了这个错误:
mutate_impl(.data,dots)中的错误:无法将对象转换为函数:[type=NULL;target=CLOSXP、SPECIALSXP或buildinsxp]。
Hmm我无法根据您提供的示例数据进行复制。您是否正在使用最新版本的
tidyverse
软件包?最近版本的
tidyr
purrr
有一些(显著)变化。我已经在
tidyr\u 1.0.0
purrr\u 0.3.3
上检查过这个。看起来我使用的是旧版本。包更新纠正了我的问题。非常感谢。伟大的解决方案!我对
数据表不太熟悉。谢谢你的分享。@kostr我添加了一些评论,试图让每一步都更清晰。一如既往,有许多工具可以完成相同的工作。
[
    {
        "PatientID": "PID01",
        "PatientName": "John Doe",
        "PatientGroup": "Group A",
        "Encounters": [
            {
                "EncounterID": "Enc01",
                "EncounterType": "Outpatient",
                "ClaimLines": [
                    {
                        "ClaimLine": 1,
                        "RevenueCode": "001"
                    },
                    {
                        "ClaimLine": 2,
                        "RevenueCode": "100"
                    },
                    {
                        "ClaimLine": 3,
                        "RevenueCode": "200"
                    },
                    {
                        "ClaimLine": 4,
                        "RevenueCode": "300"
                    },
                    {
                        "ClaimLine": 5,
                        "RevenueCode": "400"
                    }
                ]
            },
            {
                "EncounterID": "Enc02",
                "EncounterType": "Outpatient"
            }
        ]
    },
    {
        "PatientID": "PID02",
        "PatientName": "Jane Doe",
        "PatientGroup": "Group B",
        "Encounters": [
            {
                "EncounterID": "Enc03",
                "EncounterType": "Inpatient"
            },
            {
                "EncounterID": "Enc04",
                "EncounterType": "Outpatient",
                "ClaimLines": [
                    {
                        "ClaimLine": 1,
                        "RevenueCode": "001"
                    },
                    {
                        "ClaimLine": 2,
                        "RevenueCode": "100"
                    }
                ]
            },
            {
                "EncounterID": "Enc05",
                "EncounterType": "SNF"
            }
        ]
    }
]