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

如何将长数据集列表转置为单个宽数据集?

解决长格式列表转宽格式并补0的问题

方法思路

用tidyverse工具链(purrr处理列表,tidyr转换格式),确保每个子数据集都包含所有需要的类别,缺失项填充0后合并成宽格式表格。

代码实现

1. 加载依赖包

library(tidyverse)

2. 构造示例数据(匹配你的数据集结构)

Counts_L <- list(
  tibble(Idx_names = c("A", "B", "C"), Freq = c(100, 200, 300)),
  tibble(Idx_names = c("A", "C"), Freq = c(150, 2000))
)

3. 定义所有需要的类别

如果已知所有Idx_names(比如A、B、C),直接手动指定:

all_idx <- c("A", "B", "C")

如果类别不确定,可从原列表自动提取所有唯一值:

all_idx <- Counts_L %>%
  map("Idx_names") %>%
  unlist() %>%
  unique() %>%
  sort()

4. 转换并合并

Counts_W <- Counts_L %>%
  map_dfr(function(df) {
    df %>%
      # 将Idx_names转为包含所有类别的因子,强制识别缺失项
      mutate(Idx_names = factor(Idx_names, levels = all_idx)) %>%
      # 转宽格式,缺失值填充0,生成`Freq_A`这类列名
      pivot_wider(
        names_from = Idx_names,
        values_from = Freq,
        values_fill = 0,
        names_glue = "Freq_{Idx_names}"
      )
  })

结果说明

处理后的Counts_W有65行(对应原列表的65个数据集),列名为Freq_A、Freq_B、Freq_C,原数据集中缺失的类别对应的Freq会自动填充为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:04:59