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

如何在不删除末尾元素的情况下按x旁数值排序R字符串向量

R字符串向量按x后数字排序(保留末尾元素)

需求说明

原始向量:

vec <- c("3 * x1", "-0.2 * x3", "-0.1 * x2", "-7.85")

需要将前三个元素按x后方的数字从小到大排序,同时保留最后一个元素在末尾,最终得到:

[1] "3 * x1"   "-0.1 * x2" "-0.2 * x3" "-7.85"

实现代码(base R版本)

# 定义原始向量
vec <- c("3 * x1", "-0.2 * x3", "-0.1 * x2", "-7.85")

# 拆分出需要排序的部分和固定保留的末尾元素
sort_elements <- vec[-length(vec)]
fixed_element <- vec[length(vec)]

# 提取x后的数字作为排序键
sort_keys <- as.integer(sub(".*x(\\d+)$", "\\1", sort_elements))

# 按排序键排序后拼接回固定元素
sorted_vec <- c(sort_elements[order(sort_keys)], fixed_element)

# 查看结果
sorted_vec

实现代码(stringr包版本)

如果习惯用stringr处理字符串,代码更直观:

library(stringr)

vec <- c("3 * x1", "-0.2 * x3", "-0.1 * x2", "-7.85")
sort_elements <- vec[-4]
fixed_element <- vec[4]

# 提取x后面的数字
sort_keys <- str_extract(sort_elements, "(?<=x)\\d+") %>% as.integer()
sorted_vec <- c(sort_elements[order(sort_keys)], fixed_element)

结果验证

运行上述代码后,sorted_vec的输出符合预期:

[1] "3 * x1"   "-0.1 * x2" "-0.2 * x3" "-7.85"

内容的提问来源于stack exchange,提问作者honj - t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:35:26