我有一个保存为.csv文件的数据集,如下所示:
Name,Age,Password
John,9,\i1iiu1h8
Kelly,20,\771jk8
Bob,33,\kljhjj
在R中我可以通过以下方式打开此文件:
X = read.csv("file.csv",header=TRUE)
Matlab中是否有一个默认命令可以读取包含数字和字符串变量的.csv文件? csvread
似乎只喜欢数字变量。
更进一步,在R中我可以使用attach函数来创建与数据集的列和列标题相关联的变量,即
attach(X)
Matlab中有类似内容吗?
答案 0 :(得分:6)
虽然这个问题接近完全重复,但@NathanG提供的链接中建议的解决方案(即使用xlsread
)只是解决问题的一种可能方法。链接中的作者还建议使用textscan
,但不提供有关如何操作的任何信息,所以我想我会在这里添加一个示例:
%# First we need to get the header-line
fid1 = fopen('file.csv', 'r');
Header = fgetl(fid1);
fclose(fid1);
%# Convert Header to cell array
Header = regexp(Header, '([^,]*)', 'tokens');
Header = cat(2, Header{:});
%# Read in the data
fid1 = fopen('file.csv', 'r');
D = textscan(fid1, '%s%d%s', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
Header
现在应该是单元格的行向量,其中每个单元格存储一个标题。 D
是单元格的行向量,其中每个单元格存储一列数据。
我无法将D
“附加”到Header
。如果你愿意,你可以将它们放在同一个结构中,即:
S.Header = Header;
S.Data = D;
答案 1 :(得分:3)
Matlab的新表类使这很简单:
X = readtable('file.csv');
默认情况下,它会解析标题,并将它们用作列名(也称为变量名):
>> x
x =
Name Age Password
_______ ___ ___________
'John' 9 '\i1iiu1h8'
'Kelly' 20 '\771jk8'
'Bob' 33 '\kljhjj'
您可以使用其名称等选择列:
>> x.Name
ans =
'John'
'Kelly'
'Bob'
自Matlab 2013b起可用。 见www.mathworks.com/help/matlab/ref/readtable.html
答案 2 :(得分:0)
我喜欢这种方法,由Matlab 2012支持。
path='C:\folder1\folder2\';
data = 'data.csv';
data = dataset('xlsfile',sprintf('%s\%s', path,data));
您也可以执行以下操作:
[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));