你如何阅读R或matlab中的稀疏关联矩阵?

时间:2011-03-23 04:25:59

标签: c# r matlab matrix

我有一个不等行的文本文件 意思是每一行都有不同数量的元素

像是一样的东西 data1 7 6 6 5 6 7 8 9
data2 2 6 7
data3 93

每一行都是某种数据集合。我需要将每一行用作数据集合

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

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

答案 2 :(得分: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};   

您可以将其转换为结构,但请确保第1列中的所有名称都是唯一的,否则您将收到错误。

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