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

如何基于start与end列给R数据框每行生成序列并拆分多行?

解决方法

先明确预期输出格式:

ID value
1  a     2
2  a     3
3  b     5
4  b     6
5  b     7
6  b     8
7  b     9
8  b    10

下面提供三种常用实现方式:

1. tidyverse 方案(dplyr + tidyr)

适合习惯tidy语法的场景,代码可读性强:

library(tidyverse)

df <- data.frame(ID = c("a","b"),start = c(2,5),end = c(3,10))

df %>%
  mutate(value = map2(start, end, seq)) %>%  # 每行生成从start到end的序列列表
  unnest(value)  # 将列表拆分为单独行

2. Base R 方案

无需额外安装包,适合轻量需求:

df <- data.frame(ID = c("a","b"),start = c(2,5),end = c(3,10))

# 遍历每行生成对应的数据框
seq_dfs <- mapply(
  function(s, e, id) data.frame(ID = id, value = seq(s, e)),
  df$start, df$end, df$ID,
  SIMPLIFY = FALSE
)

# 合并所有小数据框
do.call(rbind, seq_dfs)

3. data.table 方案

处理大规模数据时效率更高:

library(data.table)

df <- data.table(ID = c("a","b"),start = c(2,5),end = c(3,10))

# 按ID分组,每组生成序列并展开
df[, .(value = seq(start, end)), by = ID]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:33:25