使用R生成嵌套JSON
我试图使用R生成一个嵌套的JSON文件,但在设置它时遇到了困难。无可否认,我对JSON非常陌生,所以在概念上我落后了。我将感谢任何帮助-包括建议的地方(而不是R),这将使这项任务更容易 我有3个数据集,我正在工作-所有连接通过键。本质上,我的目标是创建一个包含患者对象的JSON文件,其中包含嵌套的遭遇&在这些遭遇中,包含嵌套的索赔行 以下是R中的设置:使用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',
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"
}
]
}
]