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

标签 r math statistics

想象以下顺序:

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

由于相似性,我想按此顺序对序列进行排序:
0000
0001
0010
0100
1000
0011
...

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

第6行紧随其后,因为它与第1行相差2位。

可以用R完成吗?

最佳答案


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

1)使用thisdigitsum函数回答:
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"

2)使用正则表达式:
x[order(gsub(0, "", x))]
#  [1] "0000" "0001" "0010" "0100" "1000" "0011" "0101" "0110" "1001" "1010" "1100"
# [12] "0111" "1011" "1101" "1110" "1111"

关于r - 用R对二进制序列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383625/

相关文章:

r - 在 r 中按组标记非连续值

c# - 在多边形中生成均匀分布点的算法

r - 主成分分析后如何拟合线性模型

java - 将数字提高到分数幂java

c - 64位除以32位

math - 计算排列数(我猜)

r - 自动查找软件性能测试中的错误?

statistics - 使用两个因变量进行回归

r - 如何对数据集进行子集化以删除任何列中具有特定值的行?

r - ggplot2 在 lapply() 循环内打印两次