用R对二进制序列进行排序

Han*_*ald 10 math statistics r

想象一下以下的序列:

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Run Code Online (Sandbox Code Playgroud)

我想按此顺序对序列进行排序,因为它们具有相似性:

0000
0001
0010
0100
1000
0011
...
Run Code Online (Sandbox Code Playgroud)

2,3,4,5行与第1行具有相同的相似性,因为它们仅相差一位.因此2,3,4,5行的顺序也可以是3,2,5,4.

接下来是第6行,因为它与第1行相差2位.

这可以用R完成吗?

Jul*_*ora 7

x <- c("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", 
       "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111")
Run Code Online (Sandbox Code Playgroud)

1)使用这个答案的digitsum功能:

digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
x[order(sapply(as.numeric(x), digitsum))]
#  [1] "0000" "0001" "0010" "0100" "1000" "0011" "0101" "0110" "1001" "1010" "1100"
# [12] "0111" "1011" "1101" "1110" "1111"
Run Code Online (Sandbox Code Playgroud)

2)使用正则表达式:

x[order(gsub(0, "", x))]
#  [1] "0000" "0001" "0010" "0100" "1000" "0011" "0101" "0110" "1001" "1010" "1100"
# [12] "0111" "1011" "1101" "1110" "1111"
Run Code Online (Sandbox Code Playgroud)