【问题标题】:R: Fastest way to compare i element of a vector with all the previous onesR:将向量的第 i 个元素与所有先前的元素进行比较的最快方法
【发布时间】:2019-12-30 15:18:21
【问题描述】:

我有大约 1200 个数据帧,每个数据帧大约有 25000 个值。

此数据帧基本上包含一个增量时间序列,有时在测量中会出现错误并在再次变为正确值之前下降到 0(情况 1)或下降到 0 但它不会自动更正(情况 2)。

案例1示例:

案例2示例:

我想重新标记小于先前值的点。基本上对于每个值 i 我想将值 i 与之前的所有 j 进行比较(即 j=length(vector)-i)我尝试如下操作:

x <- c(10,11,12,13,14,1,7,8,14,16,19,22) y <- x sapply(x,function(z){z<y})

获取以下信息:

       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
 [1,] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [2,]  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [3,]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [4,]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [5,]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [7,] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
 [8,] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
 [9,]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
[10,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
[11,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
[12,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

但是,我无法提取可用于过滤掉这些数据的模式。

以前有人试过吗?

【问题讨论】:

  • 你的目标是什么?你期望结果是什么?那么每个数据框只有一列?
  • diff 函数返回连续值之间的连续差。所以你可以试试diff(y) &lt; 0which(diff(y)&lt;0)

标签: r loops vector vectorization


【解决方案1】:

如果这个想法是该系列应该是非递减的,那么

ok <- cummax(x) == x

对于优点是 TRUE 并且

x[ok]

只是优点或

cummax(x)

是目前为止用最大值代替了坏点的好点。

【讨论】:

  • 像魅力一样工作,速度非常快。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多