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

R语言提取data.frame列名数值时代码运行失效问题咨询

问题根因
  • 你使用的正则规则[[:alpha:]]+作用是匹配字符串中的连续英文字母,仅适用于列名包含字母内容的场景,也就是你之前代码正常运行的场景。
  • 当前两个数据集的列名均为数值区间格式,仅由数字、括号、逗号构成,不存在任何字母字符,执行匹配后只能得到空结果,无法输出预期内容。
修正代码

如果你的预期是提取所有区间的数值端点,去重后按数值大小排序,将匹配规则替换为匹配连续数字的规则即可,同时增加数值类型转换避免字符排序逻辑错误:

library(magrittr)

s_ordered_II <- stringi::stri_extract_all_regex(colnames(dat_II), "\\d+") %>%
  unlist() %>%
  as.numeric() %>%
  unique() %>%
  sort()

s_ordered_I <- stringi::stri_extract_all_regex(colnames(dat_I), "\\d+") %>%
  unlist() %>%
  as.numeric() %>%
  unique() %>%
  sort()
说明
  • 正则\\d+可以匹配字符串中所有连续数字,不受区间开闭的括号类型((/)/[/])影响,能完整提取每个区间的左右端点数值。
  • 提取后必须转换为数值类型再排序:如果保留字符格式排序,会触发字典序错误,比如字符型下"1000"会排在"25"前面,得到不符合数值大小逻辑的排序结果。
  • 运行后s_ordered_I的输出为0 25 250 500 1000 1500 3000 1000000,s_ordered_II的输出为0 25 50 100 250 500 1000 1500 3000 1000000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:45:55