2015-10-26 229 views
1

我有一個10x1的字符矩陣(比如e212m)。將字符串轉換爲R中的數字數據類型

> print(e212m) 
     [,1]       
    [1,] "0000000000000111111000000000" 
    [2,] "0000000000000111111100000000" 
    [3,] "0000000000001111111100000000" 
    [4,] "0000000000001111111100000000" 
    [5,] "0000000000011100111100000000" 
    [6,] "0000000000011111111100000000" 
    [7,] "0000000000011111111100000000" 
    [8,] "0000000000011111111100000000" 
    [9,] "0000000000001111111000000000" 
    [10,] "0000000000000011111000000000" 
    > dim(e212m) 
    [1] 10 1 
    > typeof(e212m) 
    [1] "character" 

我想將任何行的每個字符轉換爲整數。但不喜歡

"0000000000000111111000000000"(string/character) to integer = 0000000000000111111000000000 

我想是每個字符改爲digit.eg

"0" "0" "1" "1" to number 0 0 1 1. 

那麼,到底我能得到10x29的整數矩陣。 P.S:我是R新手。歡迎執行上述任務的直接命令。

回答

3
x<-"0000000000000111111000000000" 
y<-as.numeric(strsplit(x,split='')[[1]]) 

將返回

y 
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 

如果矩陣爲M只需使用:

m2<-apply(m,1,function(x){as.numeric(strsplit(x,split='')[[1]])}) 
m2<-t(m2) 
+0

是什麼1方括號中到底是什麼意思? – shane

+0

而且我還需要使用循環的10行?如果你能指導我,將非常感激。 – shane

+1

'[[1]]'選擇列表的第一個元素(因爲'strsplit'返回一個列表)。我添加了一次編輯轉換矩陣 – etienne

2
x <- c("0000000000000111111000000000", "0000000000000111111100000000", "0000000000001111111100000000") 
y <- paste(x, collapse = "\n") 
read.fwf(textConnection(y), rep(1, nchar(x[1]))) 
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 
#1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 
#2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 
#3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 
0

嘗試使用正則表達式。

gsub('(\\d)','\\1 ',x) 

gsub('(?<=\\d)(\\d)',' \\1',x,perl=T) 
相關問題