如何用dplyr/tidyverse获取DataFrame中JSON数组的长度?
解决方案
你可以结合dplyr的管道语法和purrr的映射函数,批量解析每行的JSON字符串并提取数组长度,同时自动处理空数组"[]"的情况:
步骤1:加载依赖包
确保你已经安装并加载了必要的包:
library(dplyr) library(jsonlite) library(purrr)
步骤2:批量处理JSON列
假设你的JSON字符串列名为outcome(替换成你实际的列名),直接在管道中用map_int逐行处理:
data_analysis <- data %>% mutate(array_length = map_int(outcome, ~length(fromJSON(.x))))
代码说明
map_int会遍历outcome的每一个元素,对每个JSON字符串执行fromJSON(.x)解析,再用length()获取数组长度,最后返回一个整数列。- 空数组
"[]"解析后是长度为0的向量,length()会返回0,完全符合需求。
带错误处理的版本(可选)
如果存在格式错误的JSON字符串,可使用possibly添加容错机制,避免解析失败导致整个流程中断:
# 定义安全的JSON解析函数,解析失败时返回空列表 safe_fromJSON <- possibly(fromJSON, otherwise = list()) data_analysis <- data %>% mutate(array_length = map_int(outcome, ~length(safe_fromJSON(.x))))
示例验证
用模拟数据测试效果:
# 模拟包含JSON数组列的DataFrame data <- tibble( outcome = c( '["x", "y"]', "[]", '["a", "b", "c"]' ) ) # 执行处理 data_analysis <- data %>% mutate(array_length = map_int(outcome, ~length(fromJSON(.x))))
处理后的data_analysis会新增array_length列,值分别为2、0、3,与预期一致。
内容的提问来源于stack exchange,提问作者clog14
相关产品推荐
相关产品推荐

