Разбить двоичную строку на подстроки длины n, затем декодировать каждую подстроку в R - PullRequest
0 голосов
/ 18 марта 2020

У меня есть двоичная строка длины n, которую я sh разделю на подстроки размера 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 Ответ

0 голосов
/ 18 марта 2020

Вам это помогает?

Создает небольшую функцию 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

Создано в 2020-03-18 пакетом Представить (v0.3.0)

Если вы убедитесь, что вы хотите всегда получать числовое значение c, используйте эту функцию

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

Создано в 2020-03-18 пакетом Представить (v0.3.0)

...