如何用tidyjson提取JSON值替换数据框原列内容?
解决方案
要把原数据框df的response列替换为提取出的JSON"text"值,核心是将tidyjson提取的结果转换成向量后,直接赋值回原列即可,具体分以下几种情况处理:
情况1:每个JSON数组仅含一个元素
这种情况下提取出的text行数和原数据框行数一致,直接提取赋值:
# 提取JSON中的text并转为向量 extracted_text <- df$response %>% as.tbl_json() %>% gather_array() %>% spread_values(text = jstring('text')) %>% pull(text) # 替换原response列 df$response <- extracted_text
情况2:每个JSON数组含多个元素
如果单个JSON里有多个text值,你需要先确定如何整合这些值:
- 取数组第一个元素:
extracted_text <- df$response %>% as.tbl_json() %>% gather_array() %>% filter(array.index == 1) %>% # 筛选数组第一个元素 spread_values(text = jstring('text')) %>% pull(text) df$response <- extracted_text
- 将多个text合并为单个字符串(用逗号分隔):
extracted_text <- df$response %>% as.tbl_json() %>% gather_array() %>% spread_values(text = jstring('text')) %>% group_by(document.id) %>% # 按原数据框的行分组 summarise(text = paste(text, collapse = ", ")) %>% pull(text) df$response <- extracted_text
关键说明
pull(text)会把提取后的text列转换成向量,只要保证向量的行数和原数据框df的行数一致,就能直接替换原response列。如果你的JSON结构更复杂,需要根据实际层级调整spread_values或其他tidyjson函数的使用。
内容的提问来源于stack exchange,提问作者threxx
相关产品推荐
相关产品推荐

