如何使用行和列标题导入数据

时间:2013-11-24 17:25:06

标签: matlab matrix dataset

我想从带有行标题和列标题的文本文件中导入数据,并将其导入矩阵中。例如,输入文件如下所示:

data c1 c2 c3 c4
r1   1  2  3  4
r2   5  6  7  8

此外,是否可以使用相应的数据元素访问行名和列名?是否可以根据操作结果对其进行修改?

提前致谢。

3 个答案:

答案 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}}。