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

如何在R语言中基于矩阵生成含数据框行名的列表

解决方案

基础R实现(高效简洁)

直接利用apply()遍历矩阵的每一列,筛选出值为1的行对应的s1行名:

# 提前提取行名,避免重复计算
row_names <- rownames(s1)
# 按列遍历矩阵,生成目标列表
l1 <- apply(m1, 2, function(col) row_names[col == 1])

运行后得到的结果完全符合预期:

> l1
[[1]]
[1] "red"   "green" "black" "white"

[[2]]
[1] "yellow" "orange"

[[3]]
[1] "green" "blue"  "white"

Tidyverse风格实现

如果你习惯使用tidyverse工具链,可以用purrr::map()来完成遍历:

library(purrr)

l1 <- map(seq_len(ncol(m1)), ~ rownames(s1)[m1[, .x] == 1])

问题原因说明

你之前的代码仅针对矩阵的第一列(m1[,1]),没有实现列的遍历逻辑。上面两种方法的核心都是自动遍历矩阵的所有列,对每一列重复执行你已经写好的筛选逻辑。

大数据量适配

对于大规模数据,提前提取行名(如row_names <- rownames(s1))可以减少重复计算,提升效率。基础R的apply()本身是底层优化实现,在处理大矩阵时性能表现良好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:25:30