我正在尝试将下面的json转换为数据框:
data_toy.json =
{
"department": {
"BME": [
{
"course_name": "BMD_ENG_250-0_20 Thermodynamics",
"instructor": "Neha Kamat",
"instructor_gender": "F"
}
]
}
}
但是,当我跑步时
library(jsonlite)
dat <- as.data.frame(fromJSON('data_toy.json'))
我得到:
> str(dat)
'data.frame': 1 obs. of 3 variables:
$ department.BME.course_name : chr "BMD_ENG_250-0_20 Thermodynamics"
$ department.BME.instructor : chr "Neha Kamat"
$ department.BME.instructor_gender: chr "F"
我如何:
1)为department
添加一列吗?
2)填写以下栏:部门,课程名称,讲师,教官性别?
答案 0 :(得分:1)
我认为您需要发布更多数据,但是:
data_toy.json = '{"department": {"BME": [{"course_name": "BMD_ENG_250-0_20 Thermodynamics","instructor": "Neha Kamat","instructor_gender": "F"}]}}'
dat <- jsonlite::fromJSON(data_toy.json, simplifyVector = FALSE, simplifyDataFrame = FALSE, flatten=FALSE)
str(dat)
## List of 1
## $ department:List of 1
## ..$ BME:List of 1
## .. ..$ :List of 3
## .. .. ..$ course_name : chr "BMD_ENG_250-0_20 Thermodynamics"
## .. .. ..$ instructor : chr "Neha Kamat"
## .. .. ..$ instructor_gender: chr "F"
基本R:
do.call(
rbind.data.frame,
unname(lapply(dat, function(x) {
tdf <- as.data.frame(x[[1]], stringsAsFactors=FALSE)
tdf$department <- names(x)[1]
tdf
}))
)
## course_name instructor instructor_gender department
## 1 BMD_ENG_250-0_20 Thermodynamics Neha Kamat F BME
如果您陷在整洁中:
library(purrr)
map_df(dat, ~{
flatten_df(.x[[1]]) %>%
dplyr::mutate(department = names(.x)[1])
})
## # A tibble: 1 x 4
## course_name instructor instructor_gender department
## <chr> <chr> <chr> <chr>
## 1 BMD_ENG_250-0_20 Thermodynamics Neha Kamat F BME