1

目前我有一个 435x1 单元阵列,它是由 importdata 形成的。每个元素都是一个包含 17 个值的字符串,以逗号分隔。

我想让字符串填满每一行的列,而不是每行一个字符串包含在一个元素中。所以基本上,我想要一个 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 单元格数组,其中的列是用逗号分隔的字符串。

4

4 回答 4

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
于 2013-10-29T02:00:51.693 回答
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;
于 2013-10-29T04:21:35.057 回答
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

然后,您可以使用表格将其导入 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

希望有帮助!

于 2013-10-29T02:00:22.353 回答
0

如果您没有 R2013b,或者由于某种原因不想利用 table,您也可以这样做:

cellData = cell(numel(data), 17);  % preallocate
for idx=1:numel(data)
    cellData(idx,:) = strsplit(data{idx}, ',');
end
于 2013-10-29T13:50:27.980 回答