如何从Mongolite生成的Dataframe中提取数组元素并单独统计?
解决方案
你的核心问题是MongoDB导出的数组被转成了字符串格式(比如c("Short", "Western")),需要先把这些字符串还原为实际的多元素向量,再拆分展开,最后统计单个元素的频次。
步骤1:将字符串格式的数组转为字符向量列表
使用purrr::map配合eval(parse(text = ...)),把每个单元格的字符串解析成R能识别的字符向量:
library(dplyr) library(purrr) library(tidyr) # 解析字符串为字符向量列表 duplicates_removed <- duplicates_removed %>% mutate(genres = map(genres, ~ eval(parse(text = .x))))
步骤2:展开列表列为多行
用tidyr::unnest_longer把每个向量里的元素拆分成单独的行,这样每个genre会单独占一行:
# 展开为长格式 genres_long <- duplicates_removed %>% unnest_longer(genres)
步骤3:统计单个genre的频次
现在就可以正常用count统计每个元素的出现次数了:
# 统计并按频次排序 genre_counts <- genres_long %>% count(genres, sort = TRUE)
可选:处理解析错误
如果你的数据里存在格式异常的genres字符串(比如无法解析的内容),可以用tryCatch避免报错,把解析失败的内容转为NA:
duplicates_removed <- duplicates_removed %>% mutate(genres = map(genres, ~ { tryCatch(eval(parse(text = .x)), error = function(e) NA_character_) }))
内容的提问来源于stack exchange,提问作者Tom Lin
相关产品推荐
相关产品推荐

