2013-10-29 216 views
1

目前我有一個435x1單元陣列,它是由importdata組成的。每個元素是一個由逗號分隔的17個值的字符串。Matlab單元陣列

我想讓字符串填滿每行的列,而不是每行包含一個元素的字符串。所以基本上,我想要一個435x17單元格數組,其中每個元素是一個單元格數組,而不是435x1單元格數組,每個元素都是一個字符串。

到目前爲止我已經得到最接近的是:

data = importdata('my_data.data'); 
for x=1:size(data,1) 
    data(x,:) = {strsplit(data{x}, ',')}; 
end 

這將使在每個元素的單元陣列的字符串。通過上面的代碼,我仍然有一個435x1單元陣列,但是每個單元現在都是1x17單元陣列。

有誰能告訴我把它變成一個435x17單元陣列嗎?任何幫助表示讚賞。

從數據文件中的一行是這樣的:

republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y 

有435行的字符串。我想要一個435x17單元格數組,其中列是由逗號分隔的字符串。

回答

2

嘗試是這樣的:

temp_data = importdata('my_data.data'); 
data = cell(size(temp_data,1),17); 
for x=1:size(temp_data,1) 
    data(x,:) = strsplit(temp_data{x}, ','); 
end 
clear temp_data; 
0

你有任何樣本數據?也許只是csv文件的幾行?

無論如何,如果您有R2013b,您應該可以使用表格進行此操作。對於「data.csv」文件:

republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y 
democrat,y,n,y,n,n,n,y,y,y,n,!,n,n,n,y,n 

您可以使用table然後導入到MATLAB這樣的:

>> t = readtable('data.csv','ReadVariableNames', false) 

t = 

     Var1  Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 Var12 Var13 Var14 Var15 Var16 Var17 
    ____________ ____ ____ ____ ____ ____ ____ ____ ____ _____ _____ _____ _____ _____ _____ _____ _____ 

    'republican' 'n'  'y'  'n'  'y'  'y'  'y'  'n'  'n'  'n'  'y'  '?'  'y'  'y'  'y'  'n'  'y' 
    'democrat'  'y'  'n'  'y'  'n'  'n'  'n'  'y'  'y'  'y'  'n'  '!'  'n'  'n'  'n'  'y'  'n' 

那你是怎麼可以很容易地創建一個表。我也建議尋找到只使用一個表來保存這些數據,而不是處理它作爲一個單元陣列,因爲它是由處理數據處理任務,並具有功能,可能與你正在嘗試做的幫助。但是,如果你真的需要它是一個單元陣列可以肯定只是錶轉換成細胞:

>> c = table2cell(t) 

c = 

    'republican' 'n' 'y' 'n' 'y' 'y' 'y' 'n' 'n' 'n' 'y' '?' 'y' 'y' 'y' 'n' 'y' 
    'democrat'  'y' 'n' 'y' 'n' 'n' 'n' 'y' 'y' 'y' 'n' '!' 'n' 'n' 'n' 'y' 'n' 

>> size(c) 

ans = 

    2 17 

希望幫助!

+0

嗨,我用數據樣本更新了我的答案。 – Sterling

+0

謝謝,我已經更新了我的答案,使用您的數據與另一個被欺騙的民主黨人線,這是共和黨的行相反:-) 我也已經添加了如何將錶轉換爲單元格數組,但可能會不是你想要做的。 –

+0

我明白了。我不知道readtable只適用於r2013b。我正在使用r2013a。希望你的回答能夠幫助其他人。 – Sterling

2

您可以使用cat來做到這一點。這裏有一個小例子:

data = {{1,2,3};{4,5,6};{7,8,9};{10,11,12}}; 
size(data) 
ans = 

    4 1 

newData = cat(1,data{:}); 
size(newData) 
ans = 

    4 3 

編輯: 如果你有一個字符串單元陣列,而不是,你可以做到以下幾點:

data = {{'123'};{'456'};{'789'};{'abc'}}; 
size(data) 
ans = 

    4 1 

data2 = cat(1, data{:}); 
data3 = cell2mat(newData); 
size(data3) 
ans = 

    4 3 

data3 = 

123 
456 
789 
abc 
+0

嗨,這適用於您發佈的示例,但不適用於我的示例。每個元素實際上是一個字符串,而不是一個單元格數組(直到我運行該代碼塊時,我「關閉」了)。有沒有什麼辦法可以直接從字符串的單元格數組到nxm單元格數組,n =字符串的數量,m =字符串的長度? – Sterling

0

如果您沒有R2013b,或者因爲某些原因不想使用表格,您也可以這樣做:

cellData = cell(numel(data), 17); % preallocate 
for idx=1:numel(data) 
    cellData(idx,:) = strsplit(data{idx}, ','); 
end