替换高频数据中的值

时间:2019-04-20 17:05:27

标签: r replace subset

我有关于时长的高频数据。我发现我添加了1800 *随机数,我无法丢弃一些错误的条目。现在我很愚蠢地尝试:

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

即使我一整夜都没用,这显然没有用。我想知道是否有一种更优雅的方法,因为子集化了数据集以排除错误的条目在几秒钟内就起作用了?

1 个答案:

答案 0 :(得分:3)

可以向量化的方式完成。创建一个逻辑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)