我有一个不等行的文本文件 意思是每一行都有不同数量的元素
像是一样的东西 data1 7 6 6 5 6 7 8 9每一行都是某种数据集合。我需要将每一行用作数据集合
如何将其读入R或matlab中的数据帧或数据矩阵? 谢谢!
答案 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