转换Json数组键';s作为csv列名和值
我正在解析json数据以编写csv文件。我正在使用tidyjson包来完成这项工作 在某些情况下,我需要在单独的列中打印下面的所有主题值,并将分数作为一个值。意思是物理、数学将是一个列名,分数将有价值转换Json数组键';s作为csv列名和值,json,r,dplyr,Json,R,Dplyr,我正在解析json数据以编写csv文件。我正在使用tidyjson包来完成这项工作 在某些情况下,我需要在单独的列中打印下面的所有主题值,并将分数作为一个值。意思是物理、数学将是一个列名,分数将有价值 { "results": { "subjects": [ { "subject": { "name": "Physics", "code": "PHY" }, "score": 70
{
"results": {
"subjects": [
{
"subject": {
"name": "Physics",
"code": "PHY"
},
"score": 70
},
{
"subject": {
"name": "Mathematics",
"code": "MATH"
},
"score": 50
}
]
}
}
我尝试了以下方法:
json_data %>%
as.tbl_json %>%
gather_array %>%
spread_values(user_id = jstring("user_id")) %>%
enter_object("results") %>%
enter_object("subjects") %>%
gather_array("subjects") %>%
spread_values(score = jstring("score")) %>%
enter_object("subject") %>%
spread_values(subject = jstring("subject")) %>%
mutate(Physics = case_when(.$name == "Physics" ~ score)) %>%
mutate(Mathematics = case_when(.$name == "Mathematics" ~ score))
但这显示一个学生有多行。我需要以列值的形式显示每个主题和分数的单行
但这显示一个学生有多行。我需要以列值的形式显示每个主题和分数的单行
也就是说,您需要基于主题名称的唯一行吗?在这种情况下,你可以使用
如果您有一个名为df
like的数据帧
subject <- c("phy", "math", "phy", "math")
Score <- c(10, NA, NA, 20)
df <- data.frame(subject, Score)
输出
subjectName Score
phy 10
math 20
您的示例JSON在语法上无效。您是否介意运行
dput(json_data)
并包含,以便其他用户可以复制您的示例?json已经修复,但所需输出的示例将帮助您jsonlite::fromJSON(jsontxt)
创建了一个很好的嵌套数据帧结构,可以轻松地使用dplyr&purrThank@hrbrmstr!提供的JSON不包括“user_id”或任何表示记录属于某个学生的内容。需要一个更完整的示例。抱歉@steven请忽略“用户id”键。在这个json数据中,我有超过500个键,这就是为什么我只包含这一部分。谢谢@Emu,这解决了我的部分问题。我也在寻找一些整洁的JSON解决方案。
subjectName Score
phy 10
math 20