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

如何用gsub移除数据框列值中数字后的所有字符?

解决方法:用gsub移除数据框列中数字后的所有字符

没问题,这事儿用gsub搭配正则表达式就能轻松搞定!我帮你拆解一下思路和具体代码:

核心思路

我们的目标是保留每个值里「最后一个数字之前的所有内容」,删掉数字之后的所有字符。比如把T1a变成T1,T3b变成T3,已经是纯字母+数字的T2就保持不变。

具体代码实现

首先先构造你的示例数据框(如果已经有现成的,这步可以跳过):

# 构造示例数据
df <- data.frame(
  Tumoral_stage = c("T1a", "T1b", "T2c", "T3b", "T1c", "T2", "T3a"),
  Methastatic_stage = c("M0", "M0", "M0", "M0", "M0", "M0", "M1"),
  stringsAsFactors = FALSE
)

然后用两种不同的正则写法来实现需求,选你觉得顺手的就行:

方法1:通用型正则(适配更多场景)

这个写法不管值的前缀是什么(比如多字母、混合字符),只要最后有数字,就保留到最后一个数字为止:

df$Tumoral_stage <- gsub("^(.*\\d).*", "\\1", df$Tumoral_stage)
  • 正则解释:
    • ^:匹配字符串开头
    • (.*\\d):捕获分组,匹配「从开头到最后一个数字」的所有内容
    • .*:匹配最后一个数字之后的所有字符
    • \\1:用捕获到的分组内容替换整个字符串,相当于删掉数字后的部分

方法2:正向断言(更直观)

如果你习惯用perl风格的正则,这个写法更直观,直接匹配「数字之后的所有内容」并替换为空:

df$Tumoral_stage <- gsub("(?<=\\d).*", "", df$Tumoral_stage, perl = TRUE)
  • 正则解释:
    • (?<=\\d):正向零宽断言,定位到「前面是数字」的位置
    • .*:匹配该位置之后的所有字符
    • 替换为空字符串,就直接删掉了数字后的部分

运行结果

执行完代码后,你的数据框就变成了期望的样子:

Tumoral_stage Methastatic_stage
1            T1                M0
2            T1                M0
3            T2                M0
4            T3                M0
5            T1                M0
6            T2                M0
7            T3                M1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:02:51