如何将JSON转为Data Frame?如何用JSON映射Data Frame的分类ID与分类
问题1:如何将JSON文件转换为Data Frame?
在R中,推荐用jsonlite包处理JSON转Data Frame,操作简洁且兼容性强:
- 安装并加载包:
install.packages("jsonlite") library(jsonlite)
- 根据JSON结构选择转换方式:
- 若JSON是数组结构(直接包含多个对象):
df <- fromJSON("your_file.json")- 若JSON是嵌套结构(比如外层有
items字段,像你提供的分类JSON):
json_data <- fromJSON("CA_category_id.json") df <- as.data.frame(json_data$items)
如果用rjson包,读取后是列表结构,需手动转换:
install.packages("rjson") library(rjson) json_list <- fromJSON(file = "CA_category_id.json") df <- do.call(rbind, lapply(json_list$items, as.data.frame))
问题2:分类ID映射为分类名称的正确实现
先拆解你提供的代码问题:
- 重复读取了两次JSON文件(
data <- ...和d <- ...),完全没必要,浪费资源 - 连续两次给
vedio5$category赋值,属于无效重复操作 - 最后那个
for (category in vedio5)循环完全错误:遍历Data Frame时会逐个拿到每一列,此时给vedio5$category重复赋值,既达不到目的还会占用额外计算资源
以下是两种高效的实现方式:
方法一:用命名列表做轻量化映射
library(rjson) # 读取分类JSON并构建ID到名称的命名列表 category_data <- fromJSON(file = "CA_category_id.json") category_map <- sapply(category_data$items, function(x) { x$snippet$title }, USE.NAMES = TRUE) # 确保映射的键(分类ID)和Data Frame中的ID类型一致(统一转字符型) names(category_map) <- as.character(names(category_map)) vedio5$category_id <- as.character(vedio5$category_id) # 完成ID到名称的映射 vedio5$category <- category_map[vedio5$category_id]
方法二:用Data Frame做映射(更直观,适合后续分析)
library(jsonlite) # 读取分类JSON并提取ID和名称列 category_df <- fromJSON("CA_category_id.json")$items category_df <- category_df[, c("id", "snippet.title")] colnames(category_df) <- c("category_id", "category_name") # 通过合并Data Frame完成映射,all.x=TRUE确保保留原数据所有行 vedio5 <- merge(vedio5, category_df, by = "category_id", all.x = TRUE)
内容的提问来源于stack exchange,提问作者saga Mohamed
相关产品推荐
相关产品推荐

