2013-10-30 158 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