Matlab:更新表格并添加缺失列的技术问题求助
MATLAB表格更新与扩展解决方案
原始表格定义
t1 = struct2table(struct('a',1, 'b',2, 'c',3)); t2 = struct2table(struct('a',NaN, 'c',4, 'd',5));
对应表格内容:
t1:
| a | b | c |
|---|---|---|
| 1 | 2 | 3 |
t2:
| a | c | d |
|---|---|---|
| NaN | 4 | 5 |
需求说明
使用t2中公共列的值更新t1,同时将t2独有的列添加到t1中,最终得到单行的合并表格。
已尝试的方法及问题
- 使用
join函数报错:
>> join(t1,t2, 'Keys',{'a','c'}) Error using tabular/join (line 172) The key variables cannot contain any missing values.
原因是键列包含NaN值,join函数不支持此类场景。
- 使用
outerjoin函数得到的结果不符合预期:
>> outerjoin(t1,t2, 'Keys',{'a','c'}, 'Merge',1) ans = 2×4 table a b c d ___ ___ _ ___ 1 2 3 NaN NaN NaN 4 5
该方法生成了两行数据,未实现用t2覆盖t1公共列、保留t1独有列并添加t2独有列的目标。
期望输出
a b c d ___ ___ _ ___ NaN 2 4 5
解决方案
针对单行表格的场景,可通过直接赋值覆盖公共列、拼接独有列实现需求,具体代码如下:
% 获取t1和t2的公共列名 common_cols = intersect(t1.Properties.VariableNames, t2.Properties.VariableNames); % 用t2的公共列值覆盖更新t1 t1.(common_cols) = t2.(common_cols); % 获取t2独有的列名 t2_unique_cols = setdiff(t2.Properties.VariableNames, t1.Properties.VariableNames); % 将t2独有的列添加到t1中 t1 = [t1, t2(:, t2_unique_cols)];
运行后t1的输出与期望一致:
t1 = 1×4 table a b c d ___ ___ _ ___ NaN 2 4 5
代码解释
intersect函数筛选出两个表格的公共列名,直接用t2的对应列值覆盖t1的公共列;setdiff函数找出t2中存在但t1没有的列名,通过表格拼接将这些列追加到t1;- 由于原始t1、t2均为单行表格,无需处理多行匹配逻辑,直接操作即可得到目标结果。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

