Замена значений в высокочастотных данных - PullRequest
1 голос
/ 20 апреля 2019

У меня есть высокочастотные данные о продолжительности. Я обнаружил, что у меня есть некоторые ошибочные записи, которые я не могу удалить, к которым добавлено случайное число 1800 *. Теперь я был достаточно глуп, чтобы попытаться:

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

Что, очевидно, не сработало, хотя я оставил его на ночь. Мне было интересно, есть ли более элегантный способ для этого, так как подмножество набора данных для исключения ошибочных записей работает в считанные секунды?

1 Ответ

3 голосов
/ 20 апреля 2019

Это можно сделать векторизованным способом.Создать логический 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

data

set.seed(24)
rr <- sample(20000, 100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...