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

如何将DataFrame按行转换为含分组矩阵的嵌套列表?

解决DataFrame按行转嵌套分组矩阵列表的问题

需求场景

现有如下DataFrame,需要按a列的行值作为外层列表的名称,将每行的b/c列、d/e列分别组合成独立的列矩阵,最终生成嵌套列表结构。

原始数据:

df = data.frame(a=c("foo", "bar", "baz"), b=1:3, c=3:1, d=4:6, e=6:4)

期望输出结构:

dflist <- list(foo=list(as.matrix(c(1,3)),
                        as.matrix(c(4,6))),
               bar=list(as.matrix(c(2,2)),
                        as.matrix(c(5,5))),
               baz=list(as.matrix(c(3,1)),
                        as.matrix(c(6,4))))

解决方案

方法一:Base R实现

无需额外依赖包,通过拆分数据+嵌套循环处理列分组:

# 定义需要分组的列集合
col_groups <- list(c("b", "c"), c("d", "e"))

# 按a列拆分数据,逐组生成嵌套矩阵列表
dflist <- lapply(split(df, df$a), function(row_data) {
  lapply(col_groups, function(cols) {
    # 将指定列的值转为向量后生成列矩阵(与示例结构一致)
    as.matrix(unlist(row_data[cols]))
  })
})

方法二:Tidyverse工具链实现

适合熟悉dplyr和purrr的用户,代码逻辑更直观:

library(dplyr)
library(purrr)

dflist <- df %>%
  split(.$a) %>%
  map(function(row_data) {
    list(
      as.matrix(c(row_data$b, row_data$c)),
      as.matrix(c(row_data$d, row_data$e))
    )
  })

验证结果

运行上述任意代码后,dflist的结构与期望输出完全一致。核心逻辑是:先按a列拆分数据为单个行的子集,再对每个子集提取指定列的值,转为矩阵后包装为嵌套列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:35:57