我有一个包含五个字段的UNBALANCED数据集:
a_code b_code sector year value
1 2 15 1970 1000
2 3 16 1971 2900
3 2 15 1970 3900
我想在MATLAB中为“value”字段创建一个4维矩阵。所以我希望在M(a_code,b_code,sector,year) = value
等矩阵中有一个值字段。我有75 a_code
,75 b_code
,19个部门和45年。所以NaN矩阵是(75,75,19,45)。
由于我的数据集不均衡(例如我没有a_code = 3
,b_code = 1
,sector = 15
,year = 1970
的值,我没有每个(a_code
,b_code
,部门,年份)组合的值。对于不可用的值,我想要NaN。我知道如何使用NaN值创建一个四维矩阵,但是如何将这些NaN值替换为我的数据集中的那些?
可能我应该写一个循环,但我不知道如何。
答案 0 :(得分:1)
以下是一些满足您要求的简单代码:
D= [1 2 15 1970 1000; 2 3 16 1971 2900; 3 2 15 1970 3900];
m= min(D(:, 1: end- 1))- 1;
shape= max(D(:, 1: end- 1))- m+ 1;
X= NaN(shape);
for k= 1: size(D, 1)
n= D(k, 1: end- 1)- m;
X(sub2ind(shape, n(1), n(2), n(3), n(4)))= D(k, end);
end
X(1, 1, 1, 1) %=> 1000
X(2, 2, 2, 2) %=> 2900
X(3, 1, 1, 1) %=> 3900
您可能希望详细说明您的具体情况,可能存在更合适的方法。例如,根据您的问题,为什么您需要将数据表示为4D数组,这一点并不十分清楚。