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

如何将循环生成的R列表输出转换为带ID的Data Frame?

将采样列表转换为带ID的数据框

问题背景

我有一组数值:

n <- c(10, 5, 35, 16, 2)
n <- as.data.frame(n)

通过循环对这些数值进行随机采样,每个数值对应采样次数,采样范围为-18到18:

p <- list()
for(i in 1:nrow(n)) {
  p[[i]] <- sample(-18:18, n$n[i], replace = TRUE)
}

输出的列表格式示例如下:

[[1]]
[1] 6 1

[[2]]
[1]  4  1 12 -8 -9

[[3]]
[1] -13 -18  18

[[4]]
[1] 17 -4  9 17

[[5]]
[1] -2 18

需要将该列表转换为包含对应顺序ID变量的Data Frame,期望输出格式如下:

CT  ID
6   1 
1   1
4   2
1   2
12  2
-8  2
-9  2
-13 3
-18 3
18  3
17  4
-4  4
9   4
17  4
-2  5
18  5

实际数据包含约300个列表元素,尝试编写循环但频繁遇到语法错误。

解决方案

方法1:Base R(无需额外安装包)

利用stack()函数快速完成转换,避免手动循环:

# 给列表每个元素赋予对应的ID名称
named_p <- setNames(p, seq_along(p))
# 展开列表为数据框
result <- stack(named_p)
# 重命名列并调整ID类型
colnames(result) <- c("CT", "ID")
result$ID <- as.integer(result$ID)

# 查看结果
print(result)

方法2:Tidyverse 语法(需安装dplyr和purrr)

如果习惯使用tidyverse生态,代码更直观:

library(tidyverse)

result <- tibble(
  ID = seq_along(p),  # 生成对应ID
  CT = p              # 绑定采样列表
) %>%
  unnest(CT) %>%      # 展开列表为行
  select(CT, ID)      # 调整列顺序

# 查看结果
print(result)

这两种方法都能高效处理300个列表元素的转换,无需编写容易出错的循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:52:45