【问题标题】:R - moving window comparison with datasets of unequal sizeR - 与大小不等的数据集进行移动窗口比较
【发布时间】:2013-04-23 15:16:48
【问题描述】:

我需要将一大组值与一小组值进行比较,并找出两者之间的最小差异。也许这是“移动窗口”的比较?我查看了几个时间序列包,但找不到(或识别)一个比较不同大小数据集的函数。下面的文本示例。非常感谢任何帮助。

    ----------1st comparison-----------

    Time     S1     S2     Diff     Mean Diff
    1        1.3    1.2    0.1
    2        1.7    1.6    0.1      0.10
    3        1.2     
    4        1.6

    ----------2nd comparison------------

    1        1.3    
    2        1.7    1.2    0.5
    3        1.2    1.6   -0.4      0.05
    4        1.6

    ----------3rd comparison------------     

    1        1.3     
    2        1.7
    3        1.2    1.2    0.0
    4        1.6    1.6    0.0      0.00     <- minimum difference 

【问题讨论】:

  • 也许这是特定于您的域的内容,但我发现您的任务的表述有些混乱。找出大集合和小集合之间的差异。如果它是你所说的移动窗口,那么它在答案中得到了很好的实现,但这真的是你需要的吗?如果这些是时间序列,那么跨时间轴移动值有什么意义?我觉得这很奇怪。

标签: r math comparison dataframe zoo


【解决方案1】:

这样的事情怎么样:

require(zoo)
S1 <- c(1.3,1.7,1.2,1.6)
S2 <- c(1.2,1.6)

我们可以使用 rollapply 来应用沿向量滚动的函数。宽度设置为较小比较向量的大小。然后,我们使用匿名函数将大向量 S1 中的值作为变量 x 传递,然后我们从中减去小向量中的值并取平均值。然后我们可以使用min 来返回最小值:

> min( rollapply( S1 , width = 2 , function(x) mean(x-S2) ) )
[1] 0

如果没有数据结构,很难使其更具通用性

【讨论】:

  • 太棒了!如果它回答了问题,您可能需要考虑按下答案旁边的绿色复选标记,这样该问题就可以从未回答的问题堆栈中移出。有关 SO 工作方式的更多信息,请参阅about。干杯!
  • @G.Grothendieck 实际上我已经重新阅读了这个问题并同意。正如你所建议的那样,它可能很简单。甚至更进一步。我将前滚到您的编辑
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多