r-使用具有变化值的自定义顺序来概括向量的排序



我有一个向量,我正试图以特定的方式排序。这些矢量基于列名。我有一份州名清单。对于每个状态,我也有一个子集_sub";以及对这些列中的每一列的计算,用"0"表示_pct";。此外,还有一个叫做";var";以及元件";US";以及";US_pct";在国家层面。

这是一个可复制的数据集:

vec <- c("var", "NY", "AK", "UT", "US", "NY_sub", "UT_sub", "AK_sub", "AK_pct", "AK_sub_pct", "NY_sub_pct", "UT_sub_pct", "UT_pct", "NY_pct", "US_pct")

我希望各州按字母顺序排列。但他们也应该遵循国家集团内部的另一种秩序。例如;AK";set应该在";var";并且在";NY";设置在布景中,我想展示";"AK_ sub";首先;sub_pct";,那么";AK";,那么";AK_pct";。然后其他所有状态都应该遵循相同的模式。";US";应该是最后但相同的一般顺序。也没有";US_sub";。

在运行代码之前,我也不知道向量中会包括哪些状态,所以我不能使用match准确地指定顺序。一般情况下必须这样做。

按字母顺序排列的部分很简单:sort(var),但我不确定如何完成其余部分

这是我想要的结果。欢迎使用dplyr解决方案。

c("var", "AK_sub", "AK_sub_pct", "AK", "AK_pct", "NY_sub", "NY_sub_pct", "NY", "NY_pct", "UT_sub", "UT_sub_pct", "UT", "UT_pct", "US", "US_pct")

这里是tidyverse中的一个选项。其想法是单独进行排序(arrange),即我们用word提取_(州缩写、国家缩写、'var')之前的前缀部分,然后用按'var'、state.abb和国家'US'顺序指定的levels创建factor,然后我们在提取的子串上添加第二个顺序,即'sub'、'pct',"sub_pct"与match按照我们想要的顺序在同一个唯一子字符串上。最后,selectpull是原始的"vec">

library(dplyr)
library(stringr)
library(tibble)
out <- tibble(vec) %>%
mutate(new = word(vec, 1, sep="_")) %>%
arrange(factor(new, levels = c('var', state.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       

相关内容

  • 没有找到相关文章