【问题标题】:Split a binary string into substrings of length n, then decode each substring in R将二进制字符串拆分为长度为 n 的子字符串,然后解码 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


【问题讨论】:

    标签: r string binary substring


    【解决方案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 创建

    【讨论】:

    • 随时评论或编辑问题/答案以反映您的编辑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2021-08-11
    • 2011-04-11
    相关资源
    最近更新 更多