如何像在R中一样在matlab中读取csv文件?

如何像在R中一样在matlab中读取csv文件?,r,matlab,csv,import-from-csv,R,Matlab,Csv,Import From Csv,我有一个保存为.csv文件的数据集,如下所示: Name,Age,Password John,9,\i1iiu1h8 Kelly,20,\771jk8 Bob,33,\kljhjj X = read.csv("file.csv",header=TRUE) [data,path] = uigetfile('C:\folder1\folder2\*.csv'); data = dataset('xlsfile',sprintf('%s\%s', path,data)); 在R中,我可以通过以下

我有一个保存为.csv文件的数据集,如下所示:

Name,Age,Password
John,9,\i1iiu1h8
Kelly,20,\771jk8
Bob,33,\kljhjj
X = read.csv("file.csv",header=TRUE)
[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));
在R中,我可以通过以下方式打开此文件:

Name,Age,Password
John,9,\i1iiu1h8
Kelly,20,\771jk8
Bob,33,\kljhjj
X = read.csv("file.csv",header=TRUE)
[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));
Matlab中是否有一个默认命令,可以读取包含数值和字符串变量的.csv文件
csvread
似乎只喜欢数字变量

更进一步,在R中,我可以使用attach函数创建与数据集的列和列标题关联的变量,即

attach(X)

Matlab中有类似的东西吗?

虽然这个问题几乎是完全重复的,但@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
现在应该是单元格的行向量,其中每个单元格存储一个Header
D
是单元格的行向量,其中每个单元格存储一列数据

我不知道如何将
D
附加到
标题
。如果您愿意,您可以将它们放在相同的结构中,即:

S.Header = Header;
S.Data = D;

我喜欢Matlab 2012支持的这种方法

path='C:\folder1\folder2\';
data = 'data.csv';
data = dataset('xlsfile',sprintf('%s\%s', path,data));
当然,您还可以执行以下操作:

Name,Age,Password
John,9,\i1iiu1h8
Kelly,20,\771jk8
Bob,33,\kljhjj
X = read.csv("file.csv",header=TRUE)
[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));

Matlab的新table类使这变得简单:

X = readtable('file.csv');
默认情况下,这将解析标题,并将其用作列名(也称为变量名):

您可以使用列的名称等来选择列:

>> x.Name

ans = 

    'John'
    'Kelly'
    'Bob'
从Matlab 2013b开始提供。
请参见的精确副本。最后一部分是对
attach
在R中的作用的微妙但重要的误述。它只向封闭环境公开列名。差异是至关重要的,因为在执行
detach(X)
时,对这些变量的更改不会持续。不鼓励使用
attach
。@NathanG我同意这几乎是一个精确的副本-但我不认为它是精确的,因为有额外的问题询问如何将标题附加到数据集。我选择提供一个答案,因为我个人会使用
textscan
来解决这个问题,而不是
xlsread
。链接答案提供的关于
textscan
的信息很少-实际上只是文档的链接。您可以使用单元格数组“附加”它们,并将标题设置为单元格数组的第一行,就像在.csv文件中一样。我唯一一次这样做是在将生成的单元格数组写入Excel时。在其他情况下,它可能看起来微不足道,但我认为它值得注意。