作为一个例子,我将以表格 PEOPLE 的形式提供数据集:
phone name address
_____ ____ ____________________
country city street
_____ ____ ______
1111 "A" "C1" "CI1" "STR1"
2222 "B" "C1" "CI2" "STR2"
3333 "A" "C3" "CI3" "STR3"
4444 "C" "C2" "CI4" "STR4"
... ... ... ... ...
正如您所看到的那样(此处 A )可以有多个电话号码,每个电话号码都绑定到不同的地址(为简单起见,我们排除了同一地址可能有两个电话号码)。
我想创建一个结构数组 PERSON ,其中包含以下字段:
数据:包含 name 指定的人员
所有电话号码和地址( PEOPLE 中的第一和第三列)的表格 PERSON
|----name (single value)
|----data--* (table)
|----phone
|----address--*
|--country
|--city
|--street
正如您所看到的那样,原始数据的结构在很大程度上得到了保留,唯一的例外是提取人名并将其添加到 PERSON 结构的另一个字段中。
我的问题来自第三栏地址(使用Matlab R2014a ):
Error using table/subsrefDot (line 117)
You can not subscript a table using only one subscript. Table
subscripting requires both row and variable subscripts.
Error in table/subsref (line 62)
[varargout{1:nargout}] = subsrefDot(t,s);
我的代码是(不是最佳的,仍在学习:)):
% main script
...
% extract unique names
PEOPLE_UNIQUE = unique (PEOPLE.name,'stable');
personList = []
for person = 1:size(PEOPLE_UNIQUE)
personList = [personList, createNewPerson(PEOPLE_UNIQUE(person,:).name, PEOPLE)];
end
% function file createNewPerson.m
function PERSON = createNewPerson(name, dataset)
personData = table(dataset.phone(strcmp(dataset.name,name)),dataTable.address(strcmp(dataset.name,name)),'VariableNames',{'phone','address'});
userprofile = struct('name',name,'data', personData);
end
我确定问题来自地址,因为我已经测试过创建一个 PERSON 结构,其中包含多个其他非复杂(如在包含子列中)的单元格,并且&#39工作。
修改
我刚刚发现,在构建存储在 PERSON 中的新表格时,反汇编地址并重新组合它
personData = table(dataset.phone(strcmp(dataset.name,name)),table(dataTable.address.country(strcmp(dataset.name,name)),dataTable.address.city(strcmp(dataset.name,name)),dataTable.address.street(strcmp(dataset.name,name)),'VariableNames',{'country','city','street'}),'VariableNames',{'phone','address'});
然而,这太乏味了,我不敢想象Matlab无法在表格中插入表格。如果您可以给我一个快捷方式,我不必剖析地址,然后再次绑定相同的数据,我真的很感激。