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

如何在R语言中去除Range列中间数字并保留单个连字符

解决R中Range列保留首尾数字及单个连字符的问题

原始数据

df<-read.table (text=" ID   Range

1   1-2-3
2   1-2-3
3   4-5-6
4   4-5-7
5   10-11-12
6   10-11-12
7   14-16-17
8   19-20-21
9   10-11-12
10  12-13-14

", header=TRUE)

需求目标

将Range列中的中间数字移除,仅保留首尾数字和一个连字符,最终得到如下表格:

ID    Range
    1   1-3
    2   1-3
    3   4-6
    4   4-7
    5   10-12
    6   10-12
    7   14-17
    8   19-21
    9   10-12
    10  12-14

问题分析

你之前使用的gsub("-", "", df$Range)会直接删除所有连字符,无法实现保留单个连字符的需求,因为该操作没有针对中间的数字部分做处理。

解决方案

方法1:正则表达式精准替换

使用gsub匹配-数字-的中间部分,替换为单个连字符:

df$Range <- gsub("-(\\d+)-", "-", df$Range)

正则说明:-(\\d+)-匹配以-开头、中间包含1个或多个数字、结尾为-的片段,将其替换为单个-,直接保留首尾数字和所需的连字符。

方法2:拆分重组字符串

如果对正则表达式不熟悉,可通过拆分字符串后取首尾元素重组:

df$Range <- sapply(strsplit(df$Range, "-"), function(x) paste(x[1], x[length(x)], sep = "-"))

逻辑说明:strsplit将每个Range字符串按-拆分为数字向量,取向量的第一个和最后一个元素,再用paste拼接成带单个连字符的字符串。

验证结果

运行上述任意一种方法后,执行print(df)即可得到目标表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:01:13