2009-07-08 31 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

相關問題