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

如何高效实现按Block分组的数据透视并生成列表?

高效实现按Block分组的宽表透视并生成列表

针对你的需求,无需手动逐个处理Block,以下两种高效方法可以快速实现目标:

方法1:tidyverse工具链(代码直观易读)

利用dplyr分组统计频数,tidyr转宽表,最后拆分生成列表:

library(dplyr)
library(tidyr)

# 分组统计+转宽表+生成列表
result_list <- df %>%
  # 统计每个Block内Species-date的出现次数
  group_by(Block, Species, date) %>%
  summarise(count = n(), .groups = "drop_last") %>%
  # 转宽表,缺失组合填充0
  pivot_wider(names_from = date, values_from = count, values_fill = 0) %>%
  # 按Block拆分,去掉Block列
  group_split(Block, .keep = FALSE) %>%
  # 给列表元素命名为对应的Block
  setNames(unique(df$Block))

方法2:data.table(大数据集首选,效率更高)

如果你的数据集规模较大,data.table的分组和透视操作性能更优:

library(data.table)

setDT(df)

# 统计频数+透视+按Block拆分列表
result_list <- df[, .N, by = .(Block, Species, date)] %>%
  dcast(Species ~ date, value.var = "N", fill = 0) %>%
  split(by = "Block", keep.by = FALSE)

运行任意一种方法后,result_list就是你需要的结构:每个列表元素对应一个Block的宽表,行是物种,列是日期,值为该物种在对应日期的出现次数(无出现则为0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:01:02