如何删除 R 中二进制位序列中的结尾零?
How to remove ending zeros in binary bit sequence in R?
我需要从二进制位序列中删除结尾的零。
位序列的长度是固定的,比如52。即
0101111.....01100000 (52-bit),
10111010..1010110011 (52-bit),
10111010..1010110100 (52-bit).
从将十进制数转换为规范化双精度,有效数是 52 位,因此即使有效数在第一步小于 52 位,也会在右侧填充零。我正在逆转这个过程:也就是说,我正在尝试将内存中的标准化双精度转换为十进制数,因此,我必须删除用于填充 52 位有效数字的零(最后)。
不能保证手头的序列最后一定是0(如上面的第2个例子)。如果有,则必须截断所有结尾的零:
f(0101111.....01100000) # 0101111.....011; leading 0 must be kept
f(10111010..1010110011) # 10111010..1010110011; no truncation
f(10111010..1010110100) # 10111010..10101101
不幸的是,最后被截断的 0 的数量不同。 (第一个示例中为 5;第三个示例中为 2)。
如果输入和输出 class 是 string
:
对我来说没问题
f("0101111.....01100000") # "0101111.....011"; leading 0 must be kept
f("10111010..1010110011") # "10111010..1010110011"; no truncation
f("10111010..1010110100") # "10111010..10101101"
非常感谢任何帮助。
这是一个简单的正则表达式。
f <- function(x) sub('0+$', '', x)
解释:
0
- 匹配字符 0
.
0+
- 字符零重复至少一次,意思是,一次或多次。
$
匹配字符串的结尾。
0+$
字符 0
重复了一次或多次,直到字符串结束。
- 将模式匹配的sub-string替换为空字符串,
''
.
现在测试功能。
f("010111101100000")
#[1] "0101111011"
f("0100000001010101100010000000000000000000000000000000000000000000")
#[1] "010000000101010110001"
f("010000000101010110001000000")
#[1] "010000000101010110001"
f("00010000000101010110001000000")
#[1] "00010000000101010110001"
我需要从二进制位序列中删除结尾的零。 位序列的长度是固定的,比如52。即
0101111.....01100000 (52-bit),
10111010..1010110011 (52-bit),
10111010..1010110100 (52-bit).
从将十进制数转换为规范化双精度,有效数是 52 位,因此即使有效数在第一步小于 52 位,也会在右侧填充零。我正在逆转这个过程:也就是说,我正在尝试将内存中的标准化双精度转换为十进制数,因此,我必须删除用于填充 52 位有效数字的零(最后)。
不能保证手头的序列最后一定是0(如上面的第2个例子)。如果有,则必须截断所有结尾的零:
f(0101111.....01100000) # 0101111.....011; leading 0 must be kept
f(10111010..1010110011) # 10111010..1010110011; no truncation
f(10111010..1010110100) # 10111010..10101101
不幸的是,最后被截断的 0 的数量不同。 (第一个示例中为 5;第三个示例中为 2)。
如果输入和输出 class 是 string
:
f("0101111.....01100000") # "0101111.....011"; leading 0 must be kept
f("10111010..1010110011") # "10111010..1010110011"; no truncation
f("10111010..1010110100") # "10111010..10101101"
非常感谢任何帮助。
这是一个简单的正则表达式。
f <- function(x) sub('0+$', '', x)
解释:
0
- 匹配字符0
.0+
- 字符零重复至少一次,意思是,一次或多次。$
匹配字符串的结尾。0+$
字符0
重复了一次或多次,直到字符串结束。- 将模式匹配的sub-string替换为空字符串,
''
.
现在测试功能。
f("010111101100000")
#[1] "0101111011"
f("0100000001010101100010000000000000000000000000000000000000000000")
#[1] "010000000101010110001"
f("010000000101010110001000000")
#[1] "010000000101010110001"
f("00010000000101010110001000000")
#[1] "00010000000101010110001"