gpt4 book ai didi

r - 将二进制样本转换为数字

转载 作者:行者123 更新时间:2023-12-01 08:36:22 25 4
gpt4 key购买 nike

我有一个像这样的二进制样本:

Z = c(0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0)

我想将所有长度为4的序列转换为数字,即:

我需要阅读我的原始二进制样本并将所有可能的长度为 4 的序列转换为数字。

示例:序列 0000 为 1,序列 0001 为 2,序列 0010 为 3,...,序列 1111 为 16。

预期的输出应该是由数字 1,2,3,...16 组成的新样本,长度与原始样本相同:

Z = c(0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0)

Z1 = c(2,3,6,12,8,15,14,11,5,10,3,11,6,12,8,15,14,11,6,11)

如何在 R 中做到这一点?

最佳答案

试试:

z<-c(0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,0)
y<-as.character(z)
z1<-sapply(1:(length(y)-3),function(x){strtoi(paste(y[x:(x+3)],collapse=''),2)+1})

[1] 2 3 6 12 8 15 14 11 5 10 3 6 11 6 12 8 15 14 11 6 11

代码是这样工作的:

  • 将向量z转换为字符向量(y)
  • 对于y减3的长度(因为每个数字需要4位),应用strtoi函数

strtoi 函数通过指定输入数字的基数来转换数字(这里是 2,因为它是二进制的)。我们加 1 是因为二进制 0000 等于 0 而不是 1。

注意:转换成字符是可选的,你可以直接做

sapply(1:(length(z)-3),function(x){strtoi(paste(z[x:(x+3)],collapse=''),2)+1})

使用 vapply 也会更快:

vapply(1:(length(z)-3),function(x){strtoi(paste(z[x:(x+3)],collapse=''),2)+1},FUN.VALUE=1)

Unit: microseconds
expr min lq mean median uq max neval cld
vapply 206.866 209.111 214.3936 210.0735 211.356 338.362 100 a
sapply 230.278 231.882 234.0249 232.8440 234.128 273.897 100 b

关于r - 将二进制样本转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com