将字符串连接成数值向量

问题描述 投票:0回答:4

假设我有一长串数字"1010101010101010100011011"。我想用“,”将它们分开,例如"1,0,1,0,1,0,1,1,...",然后转换成像c(1,0,1,0,1,...)这样的数字矢量。

什么是这样做的聪明方法?

r string split casting numeric
4个回答
5
投票
a <- "1010101010101010100011011"

b <- unlist(strsplit(a,""))

c <- as.numeric(b)

class(c)
#> [1] "numeric"

4
投票

第二个选择是

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

3
投票

1]迅速提取每个字符并将其转换为数字,以提供数字矢量:

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)扫描在每个字符后插入一个空格,然后扫描以给出数字矢量。 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

2
投票

另一个选项(按照您所描述的步骤操作,首先插入,

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
© www.soinside.com 2019 - 2024. All rights reserved.