将二进制字符串拆分为长度为 n 的子字符串,然后解码 R 中的每个子字符串

Posted

技术标签:

【中文标题】将二进制字符串拆分为长度为 n 的子字符串,然后解码 R 中的每个子字符串【英文标题】:Split a binary string into substrings of length n, then decode each substring in R 【发布时间】:2020-06-29 18:49:09 【问题描述】:

我有一个长度为 n 的二进制字符串,我希望将其拆分为 k 个大小的子字符串。然后将每个子字符串解码为十进制并添加到向量或列表中。 抱歉,如果这是一个明显的问题,但我对 R 很陌生 示例字符串应返回:01 01 01 01 01 应该评估为 1 1 1 1 1

string <- 0101010101
n <- length(string)
k <- 2
#pseudocode
#For each substring in string:
#    decode substring to decimal
#    add substring to list/array


【问题讨论】:

【参考方案1】:

这对你有帮助吗?

它创建了一个小函数splitter,它接受字符串(确保将字符串输入为字符而不是数字,否则会丢失前导零)并输出子集。

# make sure that you use characters and not numbers here
# otherwise leading zeros are lost!
string <- "0101010101"

splitter <- function(t, k = 2) 
  k <- min(k, nchar(t))
  substring(t, seq(1, nchar(t) - 1, k), seq(k, nchar(t), k))


splitter(string)
#> [1] "01" "01" "01" "01" "01"
splitter(string, k = 3)
#> [1] "010" "101" "010"
splitter(string, k = 100)
#> [1] "0101010101"


## if you want to cast the values as numeric (sure that you want to case binaries to numerics?)
## use

v <- splitter(string, k = 2)
as.numeric(v)
#> [1] 1 1 1 1 1

由reprex package (v0.3.0) 于 2020-03-18 创建

如果您确定要始终获取数值,请使用此函数

splitter2 <- function(t, k = 2) 
  k <- min(k, nchar(t))
  v <- substring(t, seq(1, nchar(t) - 1, k), seq(k, nchar(t), k))
  as.numeric(v)

如果要将二进制值解码为 int,请使用strtoi(string, base = 2),即,


string <- "0101010101"
splitter3 <- function(t, k = 2) 
  k <- min(k, nchar(t))
  v <- substring(t, seq(1, nchar(t) - 1, k), seq(k, nchar(t), k))
  strtoi(v, base = 2)


splitter3(string, k = 2)
#> [1] 1 1 1 1 1
splitter3(string, k = 3)
#> [1] 2 5 2

由reprex package (v0.3.0) 于 2020-03-18 创建

【讨论】:

随时评论或编辑问题/答案以反映您的编辑!

以上是关于将二进制字符串拆分为长度为 n 的子字符串,然后解码 R 中的每个子字符串的主要内容,如果未能解决你的问题,请参考以下文章

将十六进制字符串转换为 IP 地址

将 JavaScript 字符串拆分为固定长度的片段

将输入框条目的字符串拆分为单词的子字符串

将字符串拆分为等长的部分c ++

POJ 1200Crazy Search(将字符映射为数字,将NC进制hash成10进制)

将java中的字符串拆分为固定长度的块