将矩阵读入r而不进行消除

时间:2015-04-10 19:17:37

标签: r matrix dataframe

我想读入R的文件看起来像是

0010101010101010101
1110101010101010101
1111110101010111000
0001010101000010100

当我读到问题时,R认为每一行都是一个数字而只是显示

   V1
1 Inf
2 Inf
3 Inf
4 Inf
5 Inf
6 Inf

如何以0和其他元素的矩阵形式读取它?

2 个答案:

答案 0 :(得分:3)

一个选项是

as.matrix(read.fwf('triub.txt', widths=rep(1,19)))
#    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19
#[1,]  0  0  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
#[2,]  1  1  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
#[3,]  1  1  1  1  1  1  0  1  0   1   0   1   0   1   1   1   0   0   0
#[4,]  0  0  0  1  0  1  0  1  0   1   0   0   0   0   1   0   1   0   0

或者

as.matrix(read.table(text=gsub("", ' ', readLines('triub.txt'))))
#    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19
#[1,]  0  0  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
#[2,]  1  1  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
#[3,]  1  1  1  1  1  1  0  1  0   1   0   1   0   1   1   1   0   0   0
#[4,]  0  0  0  1  0  1  0  1  0   1   0   0   0   0   1   0   1   0   0

或者你可以pipe sedawklinux

 as.matrix(read.table(pipe("sed 's/./& /g' triub.txt"), header=FALSE))
 #    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19
 #[1,]  0  0  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
 #[2,]  1  1  1  0  1  0  1  0  1   0   1   0   1   0   1   0   1   0   1
 #[3,]  1  1  1  1  1  1  0  1  0   1   0   1   0   1   1   1   0   0   0
 #[4,]  0  0  0  1  0  1  0  1  0   1   0   0   0   0   1   0   1   0   0

as.matrix(read.table(pipe("awk 'BEGIN{FS=\"\"; OFS=\" \"}{$1=$1}1' triub.txt"),
     header=FALSE))

答案 1 :(得分:2)

您可以将其视为已修复的数据文件并使用新的readr库。

library(readr)
read_fwf("0010101010101010101
1110101010101010101
1111110101010111000
0001010101000010100", fwf_widths(rep(1,19)))

这将返回一个data.frame,您可以使用as.matrix

将其转换为矩阵

或者您可以阅读这些行并拆分(如果您不知道提前列数,则非常有用)

tx<-textConnection("0010101010101010101
1110101010101010101
1111110101010111000
0001010101000010100")


do.call(rbind, lapply(strsplit(readLines(tx), strsplit, split=""), as.numeric))

close(tx)

注意我这里仅使用textConnection()来制作可重现的示例。您可以使用readLines("filename.txt")作为真实数据文件。