2011-03-23 93 views
1

我具有不等的行的文本文件 含义每行具有不同数目的元素如何阅读R或matlab中的稀疏关联矩阵?

类似
DATA1 7 6 6 5 6 7 8 9
DATA2 2 6 7
DATA3 93

每行是某种数据收集。我需要使用每一行作为数据的集合

我该如何读入R或matlab中的数据帧或数据矩阵? 谢谢!

回答

1

将您的数据保存为名为dat.txt的文本文件。然后,使用:

dat <- read.table('dat.txt', fill=T) 
+0

reade.table按列显式工作,不是rowwise。 – 2011-03-23 09:48:55

+0

嗯,我试着用原始文章中的例子,它工作得很好。 – Vincent 2011-03-23 12:32:48

+1

当然它的作品。唯一的问题是你没有得到一个变量data1,data2,data3,而是一个变量V1到V7,其中V1包含名称。另外,正如我在文章中解释的那样,使用矩阵或数据框是没有意义的,除非每列都意味着什么。一般来说,使用行组织的数据绝对不是这种情况。所以它可以工作,但它会给你以后的东西吗? – 2011-03-23 12:36:07

2

在R,我用这个功能对于在一个文本文件不同长度的行排序的数据,假设你的例子是你的文本文件的真实再现。它返回一个列表,而不是数据框或矩阵。除非文件中的列以某种方式链接,否则使用矩阵或数据框是没有意义的。列表为您提供了正确的表示形式:一组向量,每个向量表示一行,并以该行的第一个元素命名。

readRows <- function(file,sep="\n",split=" ",...){ 
    tt <- strsplit(
       scan(file,what="list",sep=sep,...), 
       split=split 
    ) 
    out <- lapply(tt,function(i) as.numeric(i[-1])) 
    names(out) <- sapply(tt,`[`,1) 
    out 
} 

这将返回一个命名列表,其中每个元素的名称是该行中的第一项,并且这些元件表示数字的行。如果您的数据不是数字,您可以根据需要调整功能。

zz <- textConnection("data1 12 33 12 
data2 11 
data3 33 44 25 51 42 11") 
readRows(zz) 
close(zz) 
0

这里是你如何在MATLAB中读取这些数据。

filename = 'input.txt'; 
fid = fopen(filename,'r'); 
rawdata = textscan(fid,'%s %[^\n]','HeaderLines',1); 
fclose(fid); 
numdata = cellfun(@str2num, rawdata{2},'uniformoutput',0); 
names = rawdata{1}; 

您可以将其转换为结构,但要确保第一列中的所有名称都是唯一的,否则会出现错误。

try 
    datastruct = cell2struct(numdata,names); 
catch ME 
    error('Cannot create data structure: %s', ME.message) 
end