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

如何解析数值范围?将DataFrame区间Range列展开为单个值

解析范围字符串并展开为单个项的DataFrame

原始数据

range <- structure(list(Range = c("0T-1T", "2T-5T")), class = "data.frame", row.names = c(NA, -2L))

目标

将范围字符串(如0T-1T、2T-5T)展开为包含每个单独项的DataFrame,最终输出如下:

structure(list(Range = c("0T", "1T", "2T", "3T", "4T", "5T")), class = "data.frame", row.names = c(NA, -6L))

解决方案1:使用tidyverse工具链

借助tidyr和dplyr完成拆分、生成序列、展开的流程:

library(tidyverse)

range2 <- range %>%
  # 拆分范围字符串为起始和结束项
  separate(Range, into = c("start", "end"), sep = "-") %>%
  mutate(
    # 提取数字部分并转为整数
    start_num = as.integer(str_remove(start, "T")),
    end_num = as.integer(str_remove(end, "T")),
    # 生成从起始到结束的数字序列,拼接"T"后缀
    Range = map2(start_num, end_num, ~paste0(.x:.y, "T"))
  ) %>%
  # 保留目标列并展开列表
  select(Range) %>%
  unnest(Range)

解决方案2:基础R实现

如果不想加载第三方包,用基础R函数也能完成:

# 遍历每个范围字符串,生成对应序列
expanded_list <- lapply(range$Range, function(range_str) {
  # 拆分字符串为起始和结束部分
  parts <- strsplit(range_str, "-")[[1]]
  # 提取数字并转为整数
  start <- as.integer(sub("T", "", parts[1]))
  end <- as.integer(sub("T", "", parts[2]))
  # 生成带"T"后缀的序列
  paste0(start:end, "T")
})

# 合并为DataFrame
range2 <- data.frame(Range = unlist(expanded_list))

验证结果

运行dput(range2)即可得到目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:20:22