将字符串连接成数字向量
concatenate a string into a numeric vector
假设我有一长串数字"1010101010101010100011011"
。我想像 "1,0,1,0,1,0,1,1,..."
这样用“,”分隔它们,然后转换成这样的数字向量 c(1,0,1,0,1,...)
.
这样做的明智方法是什么?
a <- "1010101010101010100011011"
b <- unlist(strsplit(a,""))
c <- as.numeric(b)
class(c)
#> [1] "numeric"
第二种选择是
utf8ToInt(x) - 48L
# [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
另一个选项(按照您描述的步骤),首先插入 ,
:
x <- gsub("(?!^|$)", ",", x, perl = TRUE)
x
[1] "1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1"
然后使用 scan
转换为整数向量:
scan(text = x, what = 0L, sep = ",", quiet = TRUE)
[1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
1) strapply 提取每个字符并将其转换为数字,给出一个数字向量:
library(gsubfn)
x <- "1010101010101010100011011"
strapply(x, ".", as.numeric, simplify = c)
## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
如果您有此类字符串的向量,则可用于生成数字向量列表:
xx <- c(x, x)
strapply(xx, ".", as.numeric)
2) scan 在每个字符后插入一个space,然后扫描它给出一个数值向量。 x
定义在(1).
scan(text = gsub("(.)", "\1 ", x), quiet = TRUE)
## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
3) read.fwf 将其作为宽度为 1 的固定字段读入,给出一个数据框。 x
定义在(1).
read.fwf(textConnection(x), widths = rep(1, nchar(x)))
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
## 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1
## V22 V23 V24 V25
## 1 1 0 1 1
假设我有一长串数字"1010101010101010100011011"
。我想像 "1,0,1,0,1,0,1,1,..."
这样用“,”分隔它们,然后转换成这样的数字向量 c(1,0,1,0,1,...)
.
这样做的明智方法是什么?
a <- "1010101010101010100011011"
b <- unlist(strsplit(a,""))
c <- as.numeric(b)
class(c)
#> [1] "numeric"
第二种选择是
utf8ToInt(x) - 48L
# [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
另一个选项(按照您描述的步骤),首先插入 ,
:
x <- gsub("(?!^|$)", ",", x, perl = TRUE)
x
[1] "1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1"
然后使用 scan
转换为整数向量:
scan(text = x, what = 0L, sep = ",", quiet = TRUE)
[1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
1) strapply 提取每个字符并将其转换为数字,给出一个数字向量:
library(gsubfn)
x <- "1010101010101010100011011"
strapply(x, ".", as.numeric, simplify = c)
## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
如果您有此类字符串的向量,则可用于生成数字向量列表:
xx <- c(x, x)
strapply(xx, ".", as.numeric)
2) scan 在每个字符后插入一个space,然后扫描它给出一个数值向量。 x
定义在(1).
scan(text = gsub("(.)", "\1 ", x), quiet = TRUE)
## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 1
3) read.fwf 将其作为宽度为 1 的固定字段读入,给出一个数据框。 x
定义在(1).
read.fwf(textConnection(x), widths = rep(1, nchar(x)))
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
## 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1
## V22 V23 V24 V25
## 1 1 0 1 1