Converting table within Cell arrays to matric in Matlab
2 次查看(过去 30 天)
显示 更早的评论
I'm proccessing daily temperature data since 1991 to 2022. I've proccess them into over 36 different area of interests and convert them into cell array of size 30*36 (past 30 years daily data over 36 locations). See below the screen shot of my output variable which contains this data:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/885865/image.jpeg)
When I clicked on the cell output{1,1} , it's showed me a table having two columns i.e., Date and Soilw (Date column contains date corresponding to temperature --soilw). See the image below:![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/885870/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/885870/image.jpeg)
I want to get all temperature data on 36 locations since past 30 years so, I want a cell array of size (1*36). In this cellarray{1,1} will contains a table having two columns first will be dates since 1991-2022 and second column as Soilw (Temperature). Please see below
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/885875/image.jpeg)
Note: The above image just showing one year data (356 days) into 36 locations how can I make 30 years data in this cell array over 36 locations?
Many thanks for solution of this problem?
采纳的回答
Voss
2022-2-6
You don't state how, in each cell of your wantedcell, you want to combine 30 tables with 365 rows each into one table with 365 rows, but I'll assume it's by averaging each day's data over the 30 years for that given location:
% some variables the same size and type as yours:
t = table((1:365).',randn(365,1));
c = repmat({t},30,36);
% to average all years' data by day for each location:
[m,n] = size(c);
new_c = cell(1,n);
for ii = 1:n
data = zeros(365,1);
for jj = 1:m
data = data+c{jj,ii}{:,2};
end
data = data/m;
new_c{ii} = table((1:365).',data);
end
new_c
I've used 1:365 for the days of the year. You may use datetime() variables instead.
3 个评论
Voss
2022-2-8
Something like this should work:
% some variables the same size and type as yours:
t = table((1:365).',randn(365,1));
c = repmat({t},30,36);
n = size(c,2);
new_c = cell(1,n);
for ii = 1:n
new_c{ii} = vertcat(c{:,ii});
end
class(new_c{1})
size(new_c{1})
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!