如何在不删除末尾元素的情况下按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
相关产品推荐
相关产品推荐

