使用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