2009-07-08 28 views
1

我有一个巨大的CSV文件,它具有数字和文本数据类型的混合。我想在Matlab中将它读入单个矩阵。我将用一个更简单的例子来说明我的问题。比方说,我有这个CSV文件:如何将文本字段读入MATLAB并创建单个矩阵

1,foo 
2,bar 

我想用来读取到MATLAB这样的:

A=fopen('filename.csv'); 
B=textscan(A,'%d %d', 'delimiter',','); 
C=cell2mat(B); 

前两行的工作很好,但问题是,texscan不创建2x2矩阵;相反,它会创建一个1x2矩阵,每个值都是一个数组。所以我尝试使用最后一行将数组合并成一个大矩阵,但由于数组具有不同的数据类型,因此会产生错误。

有没有办法解决这个问题?或者更好的方法来组合数组?

回答

4

我注意到如果将它们结合起来是一个好主意。你可能会更好地与他们分开。

我改变你的代码,使之更好地工作:

clear 
clc 
A=fopen('filename.csv'); 
B=textscan(A,'%d %s', 'delimiter',',') 
fclose(A) 

结果看

ķ>> B {1}

ANS =

 1 
     2 

K >> B {2}

ans =

'foo' 
'bar' 

真的,我认为这是最有用的格式。如果有的话,大多数人会想打破这一单元阵列成小块

num = B{1} 
txt = B{2} 

为什么你试图将它们结合起来?他们已经在一个单元阵列中,这是你将得到的最多的组合。

+0

我将它们结合起来创建一个矩阵,它将作为OLS回归中的因变量。我有许多需要转换为虚拟变量的文本字段(例如,表示“true”或“false”的字段将被转换为1或0)。我打算将文本粘贴到矩阵中,然后在必要时通过它并转换字段。但根据你的建议,也许最好是在它们仍在阵列中时再转换它们,然后将它们合并? 所有东西都被转换后,建议使用cell2mat进行组合? 谢谢Doug! – Jack7890 2009-07-08 19:16:02

-1

我相信你不能为此使用textscan。我会使用fscanf,它总是给你一个指定的矩阵。如果你不知道数据的布局,它会变得棘手。

的fscanf的工作原理如下:

fscanf(fid, format, size) 

其中FID是则fopen

格式产生的FID是文件格式&你是如何读取数据([ '%d' '' '%s']将适用于您的示例文件)

大小是矩阵维([2 2]可用于您的示例文件)。

0

对此有一个自然的解决方案,但它需要统计工具箱(版本6.0或更高版本)。混合数据类型可以读入数据集数组中。请参阅Mathworks帮助页面here

相关问题