我有一个大表,其条目是
KEY_A,KEY_B,VAL
其中 KEY_A 和 KEY_B 是有限的密钥集。为了参数,我们将有 4 个不同的 KEY_B 值和 4 个不同的 KEY_A 值。和示例表:
KEY_A KEY_B KEY_C
_____ _____ _________
1 1 0.45054
1 2 0.083821
1 3 0.22898
1 4 0.91334
2 1 0.15238
2 2 0.82582
2 3 0.53834
2 4 0.99613
3 1 0.078176
3 2 0.44268
3 3 0.10665
3 4 0.9619
4 1 0.0046342
4 2 0.77491
4 3 0.8173
4 4 0.86869
4 5 1
我想优雅地将桌子平成
KEY_A KEY_B_1 KEY_B_2 KEY_B_3 KEY_B_4 KEY_B_5
_____ _________ ________ _______ _______ _______
1 0.45054 0.083821 0.22898 0.91334 -1
2 0.15238 0.82582 0.53834 0.99613 -1
3 0.078176 0.44268 0.10665 0.9619 -1
4 0.0046342 0.77491 0.8173 0.86869 1
我希望能够处理丢失的 B 值(将它们设置为默认值,如 -1),但我认为如果我能以一种优雅的方式开始执行此操作,那么这些事情就会落实到位。
实际表有数百万条记录,所以我确实想使用矢量化调用。
我得到的行(不处理 int invalid 5)是:
cell2mat(arrayfun(@(x)[x,testtable{testtable.KEY_A==x,3}'],unique(testtable{:,1}),'UniformOutput',false))
但
- 它不会输出不同的表
- 如果表中缺少键,它不会处理
我认为这并不少见……以前有没有人做过这样的事情?