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

使用data.table包提取非对称字符串指定位置数字并新增列(R语言)

使用data.table提取指定位置的数字并新增列

解决方案

通过正则表达式匹配目标数字,结合data.table的高效赋值语法可快速完成需求。以下是具体实现:

1. 构造示例数据集(与你提供的内容一致)

library(data.table)

dt <- data.table(
  name = c(
    "430_6_PPP_NL_HH2_1_3-4min", "430_6_PPP_NL_HH2_2_4-5min", "430_6_PPP_NL_HH2_3_6-7min",
    "430_6_PPP_NL_HH2_4_13-14min", "430_6_PPP_NL_HH2_14-15min", "430_6_PPP_NL_HH2_15-16min",
    "430_6_PPP_NL_HH2_16-17min", "430_6_PPP_NL_HH2_17-18min", "430_6_PPP_NL_HH2_18-19min",
    "430_6_PPP_NL_HH2_19-20min", "430_6_PPP_NL_HH2_11_20-21min", "430_6_PPP_NL_HH2_12_21-22min",
    "430_6_PPP_NL_HH2_13_22-23min", "430_6_PPP_NL_HH2_14_23-24min", "430_5_PPP_NL_HH4_1_3-4min",
    "430_5_PPP_NL_HH4_2_4-5min", "430_5_PPP_NL_HH4_3_6-7min", "430_5_PPP_NL_HH4_4_13-14min",
    "430_5_PPP_NL_HH4_5_14-15min", "430_5_PPP_NL_HH4_6_15-16min", "430_5_PPP_NL_HH4_7_16-17min",
    "430_5_PPP_NL_HH4_8_17-18min", "430_5_PPP_NL_HH4_9_18-19min", "430_5_PPP_NL_HH4_10_19-20min",
    "430_5_PPP_NL_HH4_11_20-21min", "430_5_PPP_NL_HH4_12_21-22min", "430_5_PPP_NL_HH4_13_22-23min",
    "430_5_PPP_NL_HH4_14_23-24min", "430_5_PPP_NL_HH4_15_24-25min"
  )
)

2. 提取数字并新增列

提供两种实现方式,按需选择:

# 方式1:使用base R的sub函数(无需额外安装包)
dt[, New_column := as.integer(sub(".*_(\\d+)-.*", "\\1", name))]

# 方式2:使用stringr包的str_extract(语法更直观)
# library(stringr)
# dt[, New_column := as.integer(str_extract(name, "(?<=_)\\d+(?=-)"))]

3. 结果验证

运行代码后,dt会新增New_column列,内容与你期望的完全一致:

print(dt)

输出:

name New_column
 1:    430_6_PPP_NL_HH2_1_3-4min          3
 2:    430_6_PPP_NL_HH2_2_4-5min          4
 3:    430_6_PPP_NL_HH2_3_6-7min          6
 4:  430_6_PPP_NL_HH2_4_13-14min         13
 5:    430_6_PPP_NL_HH2_14-15min         14
 6:    430_6_PPP_NL_HH2_15-16min         15
 7:    430_6_PPP_NL_HH2_16-17min         16
 8:    430_6_PPP_NL_HH2_17-18min         17
 9:    430_6_PPP_NL_HH2_18-19min         18
10:    430_6_PPP_NL_HH2_19-20min         19
11: 430_6_PPP_NL_HH2_11_20-21min         20
12: 430_6_PPP_NL_HH2_12_21-22min         21
13: 430_6_PPP_NL_HH2_13_22-23min         22
14: 430_6_PPP_NL_HH2_14_23-24min         23
15:    430_5_PPP_NL_HH4_1_3-4min          3
16:    430_5_PPP_NL_HH4_2_4-5min          4
17:    430_5_PPP_NL_HH4_3_6-7min          6
18:  430_5_PPP_NL_HH4_4_13-14min         13
19:  430_5_PPP_NL_HH4_5_14-15min         14
20:  430_5_PPP_NL_HH4_6_15-16min         15
21:  430_5_PPP_NL_HH4_7_16-17min         16
22:  430_5_PPP_NL_HH4_8_17-18min         17
23:  430_5_PPP_NL_HH4_9_18-19min         18
24: 430_5_PPP_NL_HH4_10_19-20min         19
25: 430_5_PPP_NL_HH4_11_20-21min         20
26: 430_5_PPP_NL_HH4_12_21-22min         21
27: 430_5_PPP_NL_HH4_13_22-23min         22
28: 430_5_PPP_NL_HH4_14_23-24min         23
29: 430_5_PPP_NL_HH4_15_24-25min         24

正则表达式解释

  • 方式1中的.*_(\\d+)-.*:
    • .*_:贪婪匹配任意字符直到最后一个下划线
    • (\\d+):捕获一个或多个数字(目标内容)
    • -.*:匹配短横线及之后的所有字符
    • \\1:引用捕获到的数字内容
  • 方式2中的(?<=_)\\d+(?=-):
    • (?<=_):正向预查,确保目标数字前是下划线
    • \\d+:匹配一个或多个数字
    • (?=-):正向预查,确保目标数字后是短横线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:06:44