我有一個向量,我試圖以一種特定的方式排序。這些向量是基于列名的。我有一個州名的串列。我還有一個用"_sub "表示的每個州的子集和一個用"_pct "表示的對這些列的計算。此外,還有一個名為 "var "的元素和用于國家層面的 "US "和 "US_pct "元素。
下面是一個可復制的資料集:
vec < - c("var"/span>。 "NY", "AK"。 "UT", "US"。 "NY_sub",/span> "UT_sub"。 "AK_sub", "AK_pct", "AK_sub_pct",/span> "NY_sub_pct"。 "UT_sub_pct", "UT_pct"。 "NY_pct", "US_pct")
我希望各州一般是按字母順序排列的。但它們也應該在州組內遵循另一種順序。例如,"AK "組應該排在 "var "之后,"NY "組之前。在這一組中,我想先顯示 "AK_sub",然后是 "AK_sub_pct",然后是 "AK",然后是 "AK_pct"。然后其他各州也應遵循同樣的模式。美國 "應該是最后一個,但大致順序相同。也沒有 "US_sub"。
在運行代碼之前,我也不知道哪些州會被包含在矢量中,所以我不能用match來準確地指定順序。這必須是一般情況下進行的。
按字母順序排列的部分很容易:sort(var),但我不確定如何去做其他部分。
這是我想要的結果。dplyr解決方案,歡迎使用。
c("var"。 "AK_sub", "AK_sub_pct", "AK", "AK_pct"。 "NY_sub",/span> "NY_sub_pct"。 "NY", "NY_pct"。 "UT_sub",/span> "UT_sub_pct"。 "UT", "UT_pct"。 "US", "US_pct")
uj5u.com熱心網友回復:
這里,是tidyverse中的一個選項。 這個想法是分別進行排序(arrange),即我們用word提取_之前的前綴部分(state縮寫,country縮寫,'var'),然后創建一個factor,用levels按照的順序指定state. abb和國家'US',然后我們在提取的子串上添加第二個順序,即'sub', 'pct', 'sub_pct',用match在相同的唯一的子串上按我們想要的順序排列。 最后,select或pull原始'vec'
library(dplyr)
library(stringr)
library(tibble)
out <- tibble(vec) %>;%
mutate(new = word(vec, 1。 sep="_") %> %
arrange(factor(new, 水平= c('var',狀態。 abb, "US")),
match(str_extract(vec, "sub|pct|sub_pct"),
c("sub", "sub_pct">。 NA。 "pct")) %> %
select(vec)
輸出
> out
# A tibble: 15 x 1
vec
<chr>
1 var
2 AK_sub
3 AK_sub_pct
4 AK
5 AK_pct
6 NY_sub
7 NY_sub_pct
8 NY
9 NY_pct
10 UT_sub
11 UT_sub_pct
12 UT
13 UT_pct
14 US
15 US_pct
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310841.html
標籤:
上一篇:PHP-按數字順序排序
下一篇:C語言上的排序關聯串列
