Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr按两个字母数字列对表进行排序_R_Sorting_Dplyr - Fatal编程技术网

使用dplyr按两个字母数字列对表进行排序

使用dplyr按两个字母数字列对表进行排序,r,sorting,dplyr,R,Sorting,Dplyr,我的数据集如下所示: library(dplyr) Data <- tibble( Area1 = rep(c("A1 1AA", "B3 4TT","D1 1AA", "A10 6TY","A2 9GG"),2), Area2 = c("A2 7BB", "B11 5TT","A14 9SS",&qu

我的数据集如下所示:

library(dplyr)  

Data <- tibble(
      Area1 = rep(c("A1 1AA", "B3 4TT","D1 1AA", "A10 6TY","A2 9GG"),2),
      Area2 = c("A2 7BB", "B11 5TT","A14 9SS","A4 4HH","V6 9FF", "A11 6TT","B4 3DD","D1 4FF","G5 7DD","A2 7YY"))
是否有一种方法可以使用
dplyr
以所需顺序生成此输出

Output <- tibble(
      Area1 = c("A1 1AA", "A1 1AA", "A2 9GG","A2 9GG","A10 6TY","A10 6TY", "B3 4TT","B3 4TT","D1 1AA","D1 1AA"),
      Area2 = c("A2 7BB", "A11 6TT","A2 7YY","V6 9FF","A4 4HH", "G5 7DD","B4 3DD","B11 5TT","A14 9SS","D1 4FF"))

Output似乎我们可以使用
mixedorder
slice

library(dplyr)
library(gtools)
library(stringr)
Output2 <- Data %>% 
              slice(mixedorder(str_c(Area1, Area2)))
-检查OP的期望值

identical(Output, Output2)
#[1] TRUE

identical(Output, Output3)
#[1] TRUE

似乎我们可以使用
mixedorder
slice

library(dplyr)
library(gtools)
library(stringr)
Output2 <- Data %>% 
              slice(mixedorder(str_c(Area1, Area2)))
-检查OP的期望值

identical(Output, Output2)
#[1] TRUE

identical(Output, Output3)
#[1] TRUE

下面是另一个使用
arrange()
stru sort()
的选项:

库(dplyr)
图书馆(stringr)
数据%>%
排列(交叉(以(“区域”)开始,~match(.x,str_排序(唯一(.x),numeric=TRUE)))
#一个tibble:10x2
区域1区域2
1 A1 1AA A2 7BB
2 A1 1AA A11 6TT
3 A2 9GG A2 7YY
4 A2 9GG V6 9FF
5 A10 6TY A4 4HH
6 A10 6TY G5 7DD
7 B3 4T B4 3DD
8 B3 4TT B11 5TT
9 D1 1AA A14 9SS
10 D1 1AA D1 4FF

这里是另一个使用
arrange()
stru sort()
的选项:

库(dplyr)
图书馆(stringr)
数据%>%
排列(交叉(以(“区域”)开始,~match(.x,str_排序(唯一(.x),numeric=TRUE)))
#一个tibble:10x2
区域1区域2
1 A1 1AA A2 7BB
2 A1 1AA A11 6TT
3 A2 9GG A2 7YY
4 A2 9GG V6 9FF
5 A10 6TY A4 4HH
6 A10 6TY G5 7DD
7 B3 4T B4 3DD
8 B3 4TT B11 5TT
9 D1 1AA A14 9SS
10 D1 1AA D1 4FF
library(dplyr)
library(stringr)

Data %>%
  arrange(across(starts_with("Area"), ~match(.x, str_sort(unique(.x), numeric = TRUE))))

# A tibble: 10 x 2
   Area1   Area2  
   <chr>   <chr>  
 1 A1 1AA  A2 7BB 
 2 A1 1AA  A11 6TT
 3 A2 9GG  A2 7YY 
 4 A2 9GG  V6 9FF 
 5 A10 6TY A4 4HH 
 6 A10 6TY G5 7DD 
 7 B3 4TT  B4 3DD 
 8 B3 4TT  B11 5TT
 9 D1 1AA  A14 9SS
10 D1 1AA  D1 4FF