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

R语言使用tidyverse为列表中每个tibble添加列表位置列

问题

我有一个由多个tibble对象组成的列表,需要为每个tibble新增一列,用于标记该tibble在列表中的位置序号。

示例构造代码

library(tidyverse)

l <- list(
  tibble(x = 1:3, y = rev(x)),
  tibble(a = 3:1, b = rev(a))
)

原始列表输出

> l
[[1]]
# A tibble: 3 x 2
      x     y
  <int> <int>
1     1     3
2     2     2
3     3     1

[[2]]
# A tibble: 3 x 2
      a     b
  <int> <int>
1     3     1
2     2     2
3     1     3

预期效果

为每个tibble新增list_pos列,列值为对应tibble在列表中的位置序号,输出如下:

> l
[[1]]
# A tibble: 3 x 3
      x     y list_pos
  <int> <int>    <int>
1     1     3        1
2     2     2        1
3     3     1        1

[[2]]
# A tibble: 3 x 3
      a     b list_pos
  <int> <int>    <int>
1     3     1        2
2     2     2        2
3     1     3        2
实现方法

使用tidyverse中purrr包的imap函数即可完成,imap会自动将列表元素的位置索引作为第二个参数传入处理函数,不需要额外手动生成索引序列:

l <- l |> 
  imap(\(current_tibble, pos) {
    mutate(current_tibble, list_pos = pos)
  })

如果使用R 4.1以下版本不支持简写匿名函数,可以替换为标准匿名函数写法:

l <- imap(l, function(current_tibble, pos) {
  mutate(current_tibble, list_pos = pos)
})

运行代码后得到的列表和预期效果完全一致,每个子tibble都会新增值为自身所在位置的list_pos列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:57:23