将年度数据与跨越数年的一组数据分开

时间:2014-08-22 02:23:39

标签: matlab compare

我有一个日期列向量和一个数据列向量。日期从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年。

1 个答案:

答案 0 :(得分:0)

我建议使用如下的三维数据结构(轴顺序可能不同):

How you should store data

就像你提到的那样,因为有些年份是闰年,你需要经历它们并添加一个&#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}

完成