2

私はRの世界では初めてですが、次のような行シリーズを含むファイルがあります。

"0000010000010000000101000001000000011000000001
 0000000000000000000000010001000001001000110001
 0000100000000000000000010000000000000000010100
 0100000001100000000001001001100000010000000001
 0001000000000100010000010000000000010000000000"

そして、この文字列から始まる行列を作成したいと思います。今から私はこのコードを書きました:

for(line in readLines(ff)){
     line <- as.numeric(substring(line, seq(1,nchar(line),1), seq(1,nchar(line),1)))
}

lineしかし、ファイルから行を抽出するだけです。ベクトルを使用して行列を作成するにはどうすればよいですか?

4

2 に答える 2

6

編集: Ananda Mathoとagstudyの提案のおかげで、width引数を自動的に処理するためのはるかに優れた方法がここにあります。データがと呼ばれるファイルにある場合はtest.txt、次のことができます。

width <- nchar(readLines("test.txt", n=1))
m <- as.matrix(read.fwf("test.txt", widths=rep(1,width)))

それぞれの0/1は異なる値だと思います。この場合、を使用できますread.fwf。これにより、各フィールドの幅を指定してデータを読み取ることができます。

text <- "0000010000010000000101000001000000011000000001
0000000000000000000000010001000001001000110001
0000100000000000000000010000000000000000010100
0100000001100000000001001001100000010000000001
0001000000000100010000010000000000010000000000"

m <- as.matrix(read.fwf(textConnection(text), widths=rep(1,46)))

これは:

R> m
     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19
[1,]  0  0  0  0  0  1  0  0  0   0   0   1   0   0   0   0   0   0   0
[2,]  0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0
[3,]  0  0  0  0  1  0  0  0  0   0   0   0   0   0   0   0   0   0   0
[4,]  0  1  0  0  0  0  0  0  0   1   1   0   0   0   0   0   0   0   0
[5,]  0  0  0  1  0  0  0  0  0   0   0   0   0   1   0   0   0   1   0
     V20 V21 V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32 V33 V34 V35 V36
[1,]   1   0   1   0   0   0   0   0   1   0   0   0   0   0   0   0   1
[2,]   0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0
[3,]   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
[4,]   0   0   1   0   0   1   0   0   1   1   0   0   0   0   0   0   1
[5,]   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   1
     V37 V38 V39 V40 V41 V42 V43 V44 V45 V46
[1,]   1   0   0   0   0   0   0   0   0   1
[2,]   1   0   0   0   1   1   0   0   0   1
[3,]   0   0   0   0   0   1   0   1   0   0
[4,]   0   0   0   0   0   0   0   0   0   1
[5,]   0   0   0   0   0   0   0   0   0   0

あなたの場合、あなたはtextConnection(text))あなたのファイル名で置き換え、rep(1,46)あなたのマトリックスの各行の値の数によって値46inを変更します。

于 2013-02-18T09:45:43.770 に答える
6

次のものも使用できます。

t <- readLines(textConnection("0000010000010000000101000001000000011000000001
0000000000000000000000010001000001001000110001
0000100000000000000000010000000000000000010100
0100000001100000000001001001100000010000000001
0001000000000100010000010000000000010000000000"))

do.call("rbind", lapply(strsplit(t, ""), as.numeric))

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]    0    0    0    0    0    1    0    0    0     0     0     1     0     0
[2,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
[3,]    0    0    0    0    1    0    0    0    0     0     0     0     0     0
[4,]    0    1    0    0    0    0    0    0    0     1     1     0     0     0
[5,]    0    0    0    1    0    0    0    0    0     0     0     0     0     1
     [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,]     0     0     0     0     0     1     0     1     0     0     0     0
[2,]     0     0     0     0     0     0     0     0     0     1     0     0
[3,]     0     0     0     0     0     0     0     0     0     1     0     0
[4,]     0     0     0     0     0     0     0     1     0     0     1     0
[5,]     0     0     0     1     0     0     0     0     0     1     0     0
     [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
[1,]     0     1     0     0     0     0     0     0     0     1     1     0
[2,]     0     1     0     0     0     0     0     1     0     0     1     0
[3,]     0     0     0     0     0     0     0     0     0     0     0     0
[4,]     0     1     1     0     0     0     0     0     0     1     0     0
[5,]     0     0     0     0     0     0     0     0     0     1     0     0
     [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46]
[1,]     0     0     0     0     0     0     0     1
[2,]     0     0     1     1     0     0     0     1
[3,]     0     0     0     1     0     1     0     0
[4,]     0     0     0     0     0     0     0     1
[5,]     0     0     0     0     0     0     0     0
于 2013-02-18T09:58:07.227 に答える