簡體   English   中英

將一個字符串連接成一個數字向量

[英]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

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在每個字符后插入一個空格,然后在給出一個數字向量中對其進行掃描。 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

另一種選擇(按照您描述的步驟),首先插入,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM