我想要实现的目标似乎足够普通,以便有一个有效的解决方案。
我正在使用mathematica并且我有{{date1,value1},{date1,value1} ...}类型的许多不同timeseries - 您可以传递给DateListPlot的排序
然而,问题是这些datasets只有部分重叠(有些可能有95-2004的数据,有些可能是1999年至2011年等等)
现在我希望能够做到的是将这些合并到一个大的列表中,并使用共同的时间轴,即所有可用日期的Union []。然后会有值的数组,但是没有数据的零。
有没有一种有效的方法来实现这一目标?我有数百个这样的时间序列,制作一些循环整个事情的东西可能效率不高(甚至做起来也很繁琐)
非常感谢任何帮助!
答案 0 :(得分:2)
例如,
ClearAll[l1, l2];
l1 = {{date1, value1}, {date1, value2}, {date2, value3}, {date4, value4}}
l2 = {{date3, value5}, {date4, value5}, {date1, value6}}
然后
DeleteDuplicates[Union[l1, l2], #1[[1]] \[Equal] #2[[1]] &]
收益{{date1, value1}, {date2, value3}, {date3, value5}, {date4, value4}}
。这意味着如果您有相同日期的两个数据点,并且它们不同,则会丢失一个。 (这对我来说)这是不是你需要与否,所以也许你可以添加更多细节。
另一方面,这个
Transpose[{DeleteDuplicates[Last@Last@Reap@Scan[Sow[#[[1]]] &, Union[l1, l2]]],
Last@Reap[Scan[Sow[#[[2]], #[[1]]] &, Union[l1, l2]]]}]
消除重复的标题并收集每个标题下的值:
{{date1, {value1, value2, value6}},
{date2, {value3}},
{date3, {value5}},
{date4, {value4, value5}}}
(即,它收集每个日期的所有值)。
你想要的一些例子会很好。
答案 1 :(得分:2)
如果我理解你的问题,你想要
l1 = {{date1, value1}, {date1, value2}, {date2, value3}, {date4, value4}}
l2 = {{date3, value5}, {date4, value5}, {date5, value6}}
成为
l1 = {{date1, value1}, {date1, value2},
{date2, value3}, {date3, 0}, {date4, value4}, {date5,0}}
l2 = {{date1, 0}, {date2, 0}, {date3, value5}, {date4, value5}, {date5, value6}}
如果是这样,这样的事情可能有效:
If[MemberQ[l1[[All,1]],#],Cases[l1,{#,_}],{#,0}]& /@ Union[l1[[All,1]],l2[[All,2]] ]
根据您希望如何处理给定系列中同一日期的多个数据点,您可能需要在Cases []函数之前使用Sequence @@或First @,例如
If[MemberQ[l1[[All,1]],#],Sequence @@ Cases[l1,{#,_}],{#,0}]& /@
Union[l1[[All,1]],l2[[All,1]] ]
我现在回家,因此检查了这个语法错误: - )
答案 2 :(得分:0)
谢谢你们。我最终自己做了解决方案,我采用了所有时间表的联合。保存在让我们说日期范围我然后以下列方式使用Mapthread
daterange= Union[DatesOfFirstTimeseries,DatesOfSecondTimeseries];
NewVersionOfFirstTimeSeries = (daterange /.
MapThread[Rule, {DatesOfFirstTimeseries, ValuesOfFirstTimeseries}] /.
MapThread[
Rule, {daterange, Table[Indeterminate, {Length[daterange]}]}]);
NewVersionOfSecondTimeSeries = (daterange /.
MapThread[Rule, {DatesOfSecondTimeseries, ValuesOfSecondTimeseries}] /.
MapThread[
Rule, {daterange, Table[Indeterminate, {Length[daterange]}]}]);
tjis做了我需要的,但它确实伤害了我对事物的美学观点。