You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何统计嵌套列表数据框name字段的出现频次

R语言嵌套列表name字段频次统计实现方案

你的temp是多层嵌套的列表对象,每个顶层元素为单行数据框,目标统计的name字段存储在子级resource数据框中,存在个别resource为NA的无效条目,统计前需要先提取所有有效name值再做计数,以下是3种可直接运行的实现方案:

方案1:基础R实现(无需安装第三方包,入门首选)

不需要额外装任何包,直接用R自带函数即可完成,代码逻辑最直观:

# 遍历所有顶层条目,提取全部有效name值
all_names <- unlist(lapply(temp, function(item) {
  # 跳过resource为NA的无效条目
  if (all(is.na(item$resource))) return(NULL)
  # 返回当前条目下的所有name值
  item$resource$name
}))

# 生成频次统计表,重命名为易读的列名
name_count <- as.data.frame(table(all_names), stringsAsFactors = FALSE)
colnames(name_count) <- c("name", "count")

运行你提供的示例数据,输出结果中MicroPro #1对应的count值为3,和预期结果一致。

方案2:tidyverse实现(代码可读性强,适合后续数据加工)

如果平时习惯用tidyverse生态做数据处理,可以用这个方案,输出为tibble格式,衔接筛选、可视化等操作更顺畅:

# 首次使用先运行安装命令:install.packages("tidyverse")
library(tidyverse)

name_count <- map_dfr(temp, ~{
  # 跳过无效的NA条目
  if (all(is.na(.x$resource))) return(tibble())
  # 提取name列合并为总表
  .x$resource %>% select(name)
}) %>% 
  # 按name分组计数
  count(name, name = "count")

方案3:data.table实现(大数据量场景性能最优)

如果你的全量数据规模达到十万、百万级,用data.table方案运行速度远高于前两种:

# 首次使用先运行安装命令:install.packages("data.table")
library(data.table)

# 批量合并所有有效name列
all_names <- rbindlist(lapply(temp, function(item) {
  if (all(is.na(item$resource))) return(data.table())
  data.table(name = item$resource$name)
}))

# 分组统计频次
name_count <- all_names[, .(count = .N), by = name]

*小提示:如果需要按出现次数从高到低排序,只需要在生成统计表后追加对应排序代码即可:

  • 基础R版本追加:name_count <- name_count[order(-name_count$count), ]
  • tidyverse版本在count后追加:%>% arrange(desc(count))
  • data.table版本在最后追加:[order(-count)]*

内容的提问来源于stack exchange,提问作者Eric Dodson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:18:17