我想从带有行标题和列标题的文本文件中导入数据,并将其导入矩阵中。例如,输入文件如下所示:
data c1 c2 c3 c4
r1 1 2 3 4
r2 5 6 7 8
此外,是否可以使用相应的数据元素访问行名和列名?是否可以根据操作结果对其进行修改?
提前致谢。
答案 0 :(得分:1)
从readtable
上的文档中查看http://www.mathworks.com/help/matlab/ref/readtable.html
T = readtable(filename, 'ReadVariableNames', true)
如果第一列有标题
或
T = readtable(filename, 'ReadRowNames', true)
如果第一行有标题
如果您想要删除的不仅仅是第一行,您可能还会对'HeaderLines'
名称 - 值对感兴趣。
答案 1 :(得分:1)
我会在格式字符串中使用textscan
和额外的%*s
来吞噬每一行中的第一个标题列。第一个标题行应该用于计算列数,以防它未知:
fid = fopen('input.txt'); %// Open the input file
%// Read the first header row and calculate the number of columns in the file
C = textscan(fid, '%s', 1, 'Delimiter', '\n', 'MultipleDelimsAsOne', true);
cols = numel(regexp(C{1}{1}, '\s*\w+'));
%// Read the rest of the rows and store the data values in a matrix
C = textscan(fid, ['%*s', repmat('%f', 1, cols - 1)]);
A = [C{:}]; %// Store the data in a matrix
fclose(fid); %// Close the input file
数据存储在矩阵A
中。
答案 2 :(得分:1)
您可以使用rawdata = importdata(filename, '\t');
row_names = rawdata.textdata(2:end,1);
col_names = rawdata.textdata(1, 2:end);
data_mat = rawdata.data;
,例如,假设分隔符为“tab”,
row_names
col_names
和\t
是单元格数组类型。如果您希望它们是由,
或strjoin
等分隔的一个字符串,则可以对它们使用{{1}}。