2015-10-26 4 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 

, если матрица называется м просто использовать:

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) 
Смежные вопросы