2013-10-30 153 views
8

我有一個具有下列數據的單元格:添加列單元陣列

Tom  Student 
Jim  Faculty  
Clare Student 

我想要做的就是添加另一列在前面是一個序列號。

1 Tom  Student 
2 Jim  Faculty  
3 Clare Student 

請問有人能提供一些建議嗎?

+1

'[{1; 2; 3},data]'其中'data'是字符串的單元數組。 –

回答

10

你有A定義爲:

>> A={'Tom', 'Student'; 'Jim', 'Faculty'; 'Clare', 'Student'} 

A = 

    'Tom'  'Student' 
    'Jim'  'Faculty' 
    'Clare' 'Student' 

要添加列:

>> newCellCol = strsplit(num2str(1:size(A,1)))' 

newCellCol = 

    '1' 
    '2' 
    '3' 

>> A = [newCellCol A] 

A = 

    '1' 'Tom'  'Student' 
    '2' 'Jim'  'Faculty' 
    '3' 'Clare' 'Student' 

>> 

對於第一列中的數值數組:

>> newCellCol = mat2cell(1:size(A,1),1,ones(1,size(A,1)))'; 
>> A = [newCellCol A] 

A = 

    [1] 'Tom'  'Student' 
    [2] 'Jim'  'Faculty' 
    [3] 'Clare' 'Student' 

您也可以使用num2cell(1:size(A,1))'代替上面的mat2cell,如Dan所述。

1

不知道到底你的陣列是如何組織的,但如果像下面,你可以做如下:

A={{'Tom', 'Student'}, ... 
    {'Jim', 'Faculty'}, ... 
    {'Clare', 'Student'}}; 


sizeA = size(A,2); 

for i = 1:sizeA 
    A{i} = [i, A{i}] 
end 

% alternatively, instead of a for loop, you can use cellfun 
% A = cellfun(@(x, i)[i x], A, num2cell(1:size(A, 2)), 'UniformOutput',0) 

A{1} 
A{2} 
A{3} 

ans = 

    [1] 'Tom' 'Student' 


ans = 

    [2] 'Jim' 'Faculty' 


ans = 

    [3] 'Clare' 'Student' 
+2

爲什麼不只是'a = num2cell(1:3)';並[a,A];'? – Dan

+0

@Dan更好,但它給出了一個錯誤「矩陣的連接維度不一致」。我相信它可以很快解決,但我必須現在去。沒時間檢查。謝謝。 – Marcin

+0

我認爲這是因爲你已經使A成爲單元陣列的單元陣列而不是像OP那樣的單元矩陣。 – Dan