如何提取R数据框中JSON列的特定字段值?
处理R数据框中的JSON列提取问题
我来帮你搞定这个需求!在R里提取JSON格式列中的指定内容,用jsonlite包就能轻松实现,下面是具体的实现步骤和代码:
步骤1:准备环境(加载必要的包)
首先确保你安装了jsonlite和dplyr(用dplyr的管道语法会更简洁,当然用基础R也可以):
install.packages(c("jsonlite", "dplyr", "purrr")) # 首次使用需要安装 library(jsonlite) library(dplyr) library(purrr)
步骤2:构造原始数据框(模拟你的数据)
先把你提供的原始数据转换成R数据框:
df <- data.frame( item_number = 1:2, question = c('{"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"0 x 1"}}', '{"jsonTypeDefinition":"gameSelector","type":"OpenAnswer","question":{"mediaType":"text","content":"1 x 1"}}'), answer_options = c('{"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["0"]}', '{"layout":"Numpad","mediaType":"textAnswerOptions","answerOptions":["1"]}'), correct_answer = c(0, 0), stringsAsFactors = FALSE )
步骤3:提取JSON中的指定内容
用mutate结合map_chr(来自purrr)来逐行解析JSON并提取目标内容:
df_processed <- df %>% mutate( # 从question列的JSON中提取question.content字段 question = map_chr(question, ~ fromJSON(.)$question$content), # 从answer_options列的JSON中提取answerOptions数组的第一个元素 answer_options = map_chr(answer_options, ~ fromJSON(.)$answerOptions[1]) )
如果习惯用基础R语法,也可以这样写:
# 基础R实现版本 df$question <- sapply(df$question, function(x) fromJSON(x)$question$content) df$answer_options <- sapply(df$answer_options, function(x) fromJSON(x)$answerOptions[1])
步骤4:查看处理后的结果
运行完上面的代码后,打印数据框就能得到你想要的输出:
print(df_processed) # item_number question answer_options correct_answer # 1 1 0 x 1 0 0 # 2 2 1 x 1 1 0
补充说明
fromJSON()函数会将JSON字符串转换成R的列表/数据结构,方便我们提取嵌套字段;- 因为你提到
answer_options的子集始终只有一个选项,所以直接取answerOptions[1]就可以拿到目标值; - 如果后续遇到有多个选项的情况,只需要调整提取逻辑(比如转成向量或者其他格式)即可。
内容的提问来源于stack exchange,提问作者JNab
相关产品推荐
相关产品推荐

