这对你有帮助吗?
它创建了一个小函数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 创建