我的数据是每三天一次,但在我的单元格阵列中,有时缺少日期。如何在矩阵添加日期时跳过一天并将NaN放入Sample Measurement单元格中?MATLAB根据日期列创建插入NaN的表格
下面是一个例子。我从这四个站点的每一个放了两条线。不同网站之间没有任何空行 - 它们只是为了清晰起见。
Latitude Longitude SiteID Date Local Sample Measurement
43.435 -88.527778 027-0007 4/12/2007 4.3
43.435 -88.527778 027-0007 4/15/2007 9.3
43.060975 -87.913504 079-0026 4/12/2007 7.9
43.060975 -87.913504 079-0026 4/15/2007 11.3
45.203885 -90.60-8001 4/12/2007 3.3
45.203885 -90.60-8001 4/18/2007 9.5
43.020075 -88.21507 133-0027 4/12/2007 7.3
43.020075 -88.21507 133-0027 4/18/2007 5.6
下面是我想要的东西 - NaN的地方有几天没有。正如你所看到的,有不同的SiteID的,所以我需要可能做unique
分开运行的网站。
纬度经度SITEID日期本地采样测量 43.435 -88.527778 027-0007 2007年4月12日4.3 43.435 -88.527778 027-0007 2007年4月15日9.3
43.060975 -87.913504 079-0026 4/12/2007 7.9
43.060975 -87.913504 079-0026 4/15/2007 11.3
45.203885 -90.60-8001 4/12/2007 3.3
45.203885 -90.60-8001 4/15/2007 NaN
43.020075 -88.21507 133-0027 4/12/2007 7.3
43.020075 -88.21507 133-0027 4/15/2007 NaN
我开始是这样的:
Set = datenum(2007,4,12):2:datenum(2007,10,15);
B = cat(2,PM25data(:,1:2), PM25data(:,6), PM25data(:,12), PM25data(:,16)); % Pull out only the columns needed
% B = {'Lat', 'Lon', 'SiteID', 'Date', 'Data'};
E = zeros(63, 5);
i = 1;
j = 1;
k = 1;
while i <= length(PM25site) && j <= length(E) && k <= length(B) % i = 1:4, j = 1:63, k = 1:32
if datenum(B(j,4)) ~= datenum(Set(j))
C = datenum(Set(j));
D = NaN;
E(j,:) = cat(2, str2double(B(j,1:3)), C, D);
j = j+1;
else
E(j,:) = str2double(B(k,:));
k = k+1;
j = j+1;
end
E(:,3) = PM25site(i);
i = i+1;
end
此代码没有正确推进。它认为我没有正确编制索引,并且else
不正确。它会放下我想要的东西,但只会替换前几行的零,然后一直保持零。
下面是一个例子部分:
45.203885 -90.60NaN 733144 3.3
45.203885 -90.60NaN 733146 NaN
45.203885 -90.60NaN 733148 NaN
45.203885 -90.60NaN 733150 NaN
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
我不知道这是接近它的最佳方式。我只是想在没有基于日期的数据的情况下添加NaN。
但是,我仍然遇到麻烦,因为uID是一个单元格。 'E(:,3)'行出错,因为“从单元转换为双精度是不可能的”。由于siteID的格式为027-0007,因此如果转换为double,则无法保留,我不知道该怎么做。转换为字符串使他们成为4x8字符。帮帮我? – shizishan
我试图用E代替你的代码。 – shizishan
对不起,我应该已经意识到你的ID是单元而不是双单元。我的错!你可以做的一件事是有一个ID参考表,并将ID索引存储在'E'中,而不是实际的ID。例如'ID = [079-0026,025-0036,...];'这可以让你保持'E'为双重矩阵。如果'E'是一个单元格,它会变得更复杂一些。 – MrAzzaman