我有一个日期列向量和一个数据列向量。日期从1月1日到12月1日,重复多次,因为我有1701个不同地点的18年数据。
如何分离出数据,以便创建一个单元格数组(或矩阵),其中每个网站的数据都是单独保存的?我认为拥有18列(18年)然后将每一行作为不同的站点会很棒。
数据的小子集供参考。所有变量都是5466921x1单元格:
Date
继续前进并重复多次
729532
729533
729534
729535
729536
729537
729538
729539
729540
729541
729542
729543
729544
729545
729546
729547
729548
uID
指定我正在考虑的每个位置的网站id
。如您所见,由于我只选择了一小部分日期,因此只有一个uID
。如果我们要花费足够长的时间来涵盖一个网站的所有日期,我们就会联系到另一个uID
。
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
'55-059-0019'
Data
'9.8'
NaN
NaN
'6.2'
NaN
NaN
'11.3'
NaN
NaN
'23.2'
NaN
NaN
'23'
NaN
NaN
'3.4'
NaN
我尝试了以下代码,我得到了一个1701x18的单元格,就像我想要的每个单元格是365x1双,但我不认为这是正确的,因为在检查每个单元格的日期时,它们是有序的,但是困扰了好几年。每个365x1双倍(或闰年366x1双倍 - 我也没有看到)应该是从1月1日到12月31日,一个站点一年。这可能是因为我没有检查网站ID。
for year = 1997:2014 % Years under consideration
dates = datenum(year, 01, 01):datenum(year, 12, 31); % For a whole year
ind = intersect(Date3, dates);
for i = 1:18
for j = 1:length(uniqueuID)
data_PM25{j,i} = Data(ind);
date_PM25{j,i} = Date(ind);
end
end
end
data_PM25
的输出将是这样的,但有18列和更多行。每列中的行数会有所不同,因为每个365x1都是一个站点,每年有不同数量的站点:
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
<365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell><365x1 cell>
data_PM25
内的每个单元格将有365个双打,显示每天的值。
所有这些单元格的日期date_PM25
为1月1日至12月31日,第一列中的所有行均为1997,第二列为1998,一直到2014年。
答案 0 :(得分:0)
我建议使用如下的三维数据结构(轴顺序可能不同):
就像你提到的那样,因为有些年份是闰年,你需要经历它们并添加一个&#34; 2月29日&#34;所有uID都充满了NaN,因此每个数据点都有一个像{year(1-18),uID(1-1701),day(1-366)}
这样的坐标,可以提供方便的访问和高效的存储。
在评论中澄清之后:
每个日期都有一行。问题是每年没有确切数量的网站 - 1997年可能有3个网站,但2014年有300个网站。
我建议将数据存储在struct
中,其中每个元素中都有一个uID vs Date数组,其中数组(我说的是数组但是这也可以是另一种数据结构,例如根据当年的天数和uID,table
)每次都有不同的大小。
访问数据将使用:dataStruct(year).dataTable{date,uID}