我试图找到一种方法来执行包含相同变量的两个时间表的外部联接,同时不基于值对键的合并行进行排序。我希望优先选择table1(高质量数据)中的值,而不是table2(低质量数据)中的值,因为这两个表中存在相同的时间样本。
我能找到的最接近的是Merge tables Without sorting on Keys,但这对我的情况不起作用,因为我必须按时间对时间表排序,以便使用重定时,我需要重定时来压缩重复的时间样本。
例如:
table1 = array2timetable([2;5], 'RowTimes', datetime(2000:2001,1,1), 'VariableNames', {'A'})
table2 = array2timetable([1;3], 'RowTimes', datetime(2001:2002,1,1), 'VariableNames', {'A'})
mergedTable = outerjoin(table1, table2, 'MergeKeys', true, 'Keys', {'Time', 'A'})
table1 =
2×1 timetable
Time A
___________ _
01-Jan-2000 2
01-Jan-2001 5
table2 =
2×1 timetable
Time A
___________ _
01-Jan-2001 1
01-Jan-2002 3
mergedTable =
4×1 timetable
Time A
___________ _
01-Jan-2000 2
01-Jan-2001 1
01-Jan-2001 5
01-Jan-2002 3
我想要的输出是:
Time A
___________ _
01-Jan-2000 2 <- only in table1
01-Jan-2001 5 <- table1 row first, regardless of value
01-Jan-2001 1 <- table2 row second, regardless of value
01-Jan-2002 3 <- only in table2
这将允许我使用retime来获得所有可用时间样本的一组值,在它们重叠的地方首选table1:
retime(mergedTable, unique(mergedTable.Time), 'firstvalues')
Time A
___________ _
01-Jan-2000 2
01-Jan-2001 5
01-Jan-2002 3
也许有比外部连接和重定时更好的方法?
1条答案
按热度按时间k10s72fa1#
您可以使用表数据质量“排名”向两个源表中添加一列。在联接中包括此列。然后,在联接之后,您可以按质量排名和时间重新排序,最终得到所需的排序。
输出量:
如果您想在以后删除帮助器列,这很容易