【问题标题】:Replacing values in high-frequency data替换高频数据中的值
【发布时间】:2019-09-10 13:12:21
【问题描述】:

我有关于持续时间的高频数据。我发现我有一些我无法丢弃的错误条目,其中添加了 1800*随机数。现在我傻到尝试了:

for(i in 1:21863924) {while(rr[i]>=1800){rr[i]=rr[i]-1800}}

即使我把它放在了一夜之间,这显然也不起作用。我想知道是否有更优雅的方法,因为对数据集进行子集化以排除错误条目可以在几秒钟内完成?

【问题讨论】:

  • 我会先创建一个逻辑索引 i1 <- rr >= 1800 然后使用该索引替换值 rr[i1] <- rr[i1] - 1800 请注意,这些是矢量化的,不必遍历每个元素
  • 如果需要递归,请将其创建为函数并递归调用

标签: r replace subset


【解决方案1】:

它可以以矢量化的方式完成。创建逻辑vector

i1 <- rr >= 1800

使用该向量替换值,同时将值分配给原始向量

rr[i1] <- rr[i1] - 1800

递归函数是

f1 <- function(x, val) {
      i1 <- x >= val
       x[i1] <- x[i1] - val
      if(sum(x >= val) > 0) f1(x, val)
   }
out <- f1(rr, val = 1800)
sum(out >= 1800)
#[1] 0

数据

set.seed(24)
rr <- sample(20000, 100)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 2014-11-12
    • 2014-12-15
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多