如何将一个表列复制到另一个表名列?

时间:2015-05-04 11:27:14

标签: matlab

在以下玩具示例中,表t1t2分别具有形状(3 x 0)和(3 x 1)。此外,两个表都具有相同的行名称。

>> t1 = table('RowNames', {'a', 'b', 'c'});
>> t2 = table([3 ; 2 ; 1], ...
              'RowNames', {'c', 'a', 'b'}, 'VariableNames', {'x'});

然后将t2的单个列的副本作为新列添加到t1,并使用相同的变量名称。

>> t1.('x') = t2.('x');

但是,结果表t1与行名称与t2 - 列中的值之间的关联中的x不同:

>> t1({'a', 'b', 'c'}, :)
ans =
         x
         _
    a    3
    b    2
    c    1
>> t2({'a', 'b', 'c'}, :)
ans =
         x
         _
    a    2
    b    1
    c    3

t2.('x')分配给t1.('x')"尊重rownames&#34 ;?的最简单方法是什么?根据最后一个条件,我的意思是最终t1应该看起来像t2; e.g:

>> t1({'a', 'b', 'c'}, :)
ans =
         x
         _
    a    2
    b    1
    c    3

3 个答案:

答案 0 :(得分:1)

您可以使用行名称对表进行索引,因此如果从locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setExpirationDuration(MAX_DURATION_SEC); LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest, this); 中提取列表名称,则可以将其用作t1的排序:

t2

或者只需一次性完成:

order = t1.Properties.RowNames % cell array
intermediate = t2(order, :);

答案 1 :(得分:1)

由于t1没有x列,您可以将t1x的{​​{1}}列{/ 1}连接起来

t2

它会自动处理匹配的行。

答案 2 :(得分:0)

好的,这是OP。

我找到了一个(潜在的)我的问题答案:而不是

t1.('x') = t2.('x');

使用

t1.('x') = t2{t1.Properties.RowNames, 'x'};

我说这是一个"潜力"回答是因为使用MATLAB我永远都不知道什么时候适用于特定类型或特定情况的东西会一概而论。例如,此时我不知道如果列x包含非数字值,上述内容是否有效。

如果有人知道更好的方法,或者可以指出支持我的幸运猜测的文档,请发布。我很乐意接受它作为答案。