how to rename fields in struc and adding new field name
3 次查看(过去 30 天)
显示 更早的评论
Hello everyone
I have a stuct to work wit and i wonted to rename the field name (XX) by 'Area (km2)' and also i wanted to add new filed column between YY and ZZ as shown below.
wish you best
0 个评论
采纳的回答
Walter Roberson
2020-12-17
struct fieldnames must be valid MATLAB identifiers, so spaces and brackets are not permitted.
The characters are permitted in the names of Variables in table() objects.
To add a new field at a particular location, the easiest way is to add the new field and then to use orderfields() to change the order.
3 个评论
Walter Roberson
2020-12-21
foo = struct('a', 1, 'b', 2, 'd', 4);
foo.c = 3
%new field has been added but it is out of place
newfoo = orderfields(foo, {'d', 'c', 'b', 'a'})
%and now it is in very specific place
更多回答(1 个)
Jan
2020-12-21
Adding a field at the end is trivial:
porositiy.newField = [];
Adding a field at a specific location is a bad idea, because the order of fields is not really fixed. But it works:
function S = AddFieldAfter(S, AfterField, NewField, NewData)
SField = fieldnames(S);
SData = struct2cell(S);
nS = numel(S);
sizeS = size(S);
index = find(strcmp(SField, AfterField));
if ~isempty(index)
SField = cat(1, SField(1:index), {NewField}, SField(index + 1:end));
if ~isequal(size(NewData), sizeS)
NewDataC = cell([1, nS]);
NewDataC(:) = {NewData};
end
SData = cat(1, SData(1:index, 1:nS), NewDataC, SData(index + 1:end, 1:nS));
S = reshape(cell2struct(SData, SField), sizeS);
else % Field not found, append at the end:
S.(NewField) = NewData;
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!