将二进制字符串拆分为长度为 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 中的每个子字符串的主要内容,如果未能解决你的问题,请参考以下文章