我的目標是在 R 的串列中排序多個變數:
" 5x^{5}" "-2x^{3}" "5x^{7}" "0" "1"
我想得到這個訂單:
"5x^{7}" " 5x^{5}" "-2x^{3}" "1" "0"
所以指數從最高到最低,然后是數字的數字順序。我怎樣才能做到這一點?單獨減少數字是很明顯的。對于指數,有必要檢測字串中是否有 ax,然后提取指數并據此對其進行排序。但我不知道該怎么做。
uj5u.com熱心網友回復:
更詳細的選項是提取指數和乘數,然后使用arrange. 如果您需要使用這些號碼,這??樣做的好處是可以準備好這些號碼。
library(stringr)
library(dplyr)
dat <- data.frame(x = c(" 5x^{5}", "-2x^{3}", "5x^{7}", "0", "1"))
dat |> mutate(m = as.numeric(str_match(x, "([ -]*\\d )x\\^\\{(\\d)\\}")[, 2]),
exp = as.numeric(str_match(x, "([ -]*\\d )x\\^\\{(\\d)\\}")[, 3]),
n = as.numeric(x)) |>
arrange(desc(exp), desc(n))
輸出
#> x m exp n
#> 1 5x^{7} 5 7 NA
#> 2 5x^{5} 5 5 NA
#> 3 -2x^{3} -2 3 NA
#> 4 1 NA NA 1
#> 5 0 NA NA 0
由reprex 包于 2022-06-13 創建(v2.0.1)
uj5u.com熱心網友回復:
基礎 R 解決方案:
x[
order(
gsub(
".*\\{(\\d )\\}.*",
"\\1",
x
),
decreasing = TRUE
)
]
輸入資料:
x <- c(
" 5x^{5}",
"-2x^{3}",
"5x^{7}",
"0",
"1"
)
uj5u.com熱心網友回復:
嗯......它的作業原理
> x=c(" 5x^{5}","-2x^{3}","5x^{7}","0","1")
> x[order(gsub("(.*\\^\\{)(. )(\\}.*)","\\2",x),decreasing=T)]
[1] "5x^{7}" " 5x^{5}" "-2x^{3}" "1" "0"
正則運算式字串(.*\\^\\{)(. )(\\}.*)查找三件事:
(.*\\^\\{)搜索之前的任何內容^{,這是第一個拆分,
(. )搜索大括號內的任何內容,第二個拆分,
(\\}.*)搜索之后的任何內容},第三個拆分,
最后它只回傳\\2,第二個拆分的內容,
這是我們用來對字串向量的元素進行排序的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494951.html
