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

如何为R语言列表中的多个DataFrame生成连续ID序列

为列表中的多个DataFrame生成连续ID列

我有一个包含多个DataFrame的列表,示例代码如下:

Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age <- c(23, 41, 32, 58, 26)

df1 <- data.frame(Name, Age)

Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age <- c(23, 41, 32, 58, 26)
df2 <- data.frame(Name, Age)

df_list <- list(df1, df2)

我需要为列表里的所有DataFrame添加连续递增的ID列,让ID在整个列表的DataFrame中保持连续(注:你给出的示例中第二个ID为5-9,属于半连续重复,以下方案按无重复的严格连续递增处理,若需保留重复逻辑可调整代码参数)。期望的标准连续输出效果如下:

Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age <- c(23, 41, 32, 58, 26)
ID <- c(1:5)
df1 <- data.frame(Name, Age, ID)

Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age <- c(23, 41, 32, 58, 26)
ID <- c(6:10)
df2 <- data.frame(Name, Age, ID)
df_list <- list(df1, df2)

解决方案

方法一:Base R 原生实现

无需额外安装包,用基础R函数即可完成:

# 获取每个DataFrame的行数
row_counts <- sapply(df_list, nrow)
# 计算每个DataFrame的ID起始值
start_ids <- c(1, cumsum(row_counts)[-length(row_counts)] + 1)

# 循环为每个DataFrame添加ID列
for (i in seq_along(df_list)) {
  end_id <- start_ids[i] + row_counts[i] - 1
  df_list[[i]]$ID <- start_ids[i]:end_id
}

方法二:purrr包函数式实现

若习惯使用tidyverse工具链,可借助purrr包实现更简洁的批量处理:

library(purrr)

# 计算每个DataFrame的行数与ID起始值
row_nums <- map_int(df_list, nrow)
id_starts <- c(1, cumsum(row_nums)[-length(row_nums)] + 1)

# 批量为每个DataFrame添加连续ID列
df_list <- map2(df_list, id_starts, function(df, start) {
  df$ID <- start:(start + nrow(df) - 1)
  df
})

执行任意一种方法后,df_list中的每个DataFrame都会带有连续递增的ID列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:45:41