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

统计列表元素首列值并生成含计数的新数据框

统计列表元素首列值的出现次数并生成计数DataFrame

给定一个包含矩阵(含空元素)的列表,需要统计每个列表元素首列中指定分类(a、b、c)的出现次数,最终生成每行对应列表元素、每列对应分类的计数DataFrame。

输入示例

my_list <- list(cbind(c("a", "b", "a"),c("R", "B", "R")),
                cbind(),
                cbind(c("a", "a", "c","b"),c("B", "R", "R","B")))

期望输出

a b c
1 2 1 0
2 0 0 0
3 2 1 1

解决方案(基础R实现)

无需额外依赖包,用基础R函数即可完成:

# 定义需要统计的目标分类
categories <- c("a", "b", "c")

# 遍历列表处理每个元素
count_list <- lapply(my_list, function(elem) {
  # 处理空元素
  if (length(elem) == 0) {
    setNames(rep(0, length(categories)), categories)
  } else {
    # 提取首列并统计次数
    col1_counts <- table(elem[, 1])
    # 匹配所有分类,缺失分类补0
    sapply(categories, function(cat) {
      ifelse(cat %in% names(col1_counts), col1_counts[cat], 0)
    })
  }
})

# 转换为DataFrame
result_df <- as.data.frame(do.call(rbind, count_list))
colnames(result_df) <- categories

# 查看结果
print(result_df)

解决方案(tidyverse实现)

如果习惯使用tidyverse工具链,代码更简洁直观:

library(tidyverse)

categories <- c("a", "b", "c")

result_df <- map_dfr(my_list, function(elem) {
  if (length(elem) == 0) {
    # 空元素生成全0的行
    tibble(!!!set_names(rep(0, length(categories)), categories))
  } else {
    # 提取首列、统计次数、补全缺失分类、转宽格式
    elem[, 1] %>%
      as_tibble_col("val") %>%
      count(val) %>%
      complete(val = categories, fill = list(n = 0)) %>%
      pivot_wider(names_from = val, values_from = n)
  }
})

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:19:01