Нужна функция R для удаления номеров в списке, которые больше, чем предыдущий номер - PullRequest
0 голосов
/ 02 апреля 2020

Я бы хотел найти на 5 больше, чем предыдущий номер, и удалить их.

Например, начиная со списка ниже:

list <- c(1,1,15,1,4,2,3,1,20,1,3,2)

В результате приведен список ниже:

list <- c(1,1,1,4,2,3,1,1,3,2)

Это исключило 15 и 20 из исходного списка.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

с использованием базы

x <- c(1,1,15,1,4,2,3,1,20,1,3,2)
x[which(diff(c(0,x)) < 5 | diff(c(0, x)) < 0)]
#[1] 1 1 1 4 2 3 1 1 3 2
1 голос
/ 02 апреля 2020

Мы можем использовать diff:

list[c(TRUE, diff(list) <= 5)]
#[1] 1 1 1 4 2 3 1 1 3 2

Другие варианты могут быть:

list[c(TRUE, tail(list, -1) - head(list, -1) <= 5)]
list[list - dplyr::lag(list, default = list[1]) <= 5]
list[list - data.table::shift(list, fill = list[1]) <= 5]

Вместо удаления, если мы хотим заменить их на среднее значение соответствующих значений мы можем повернуть значения до NA и затем использовать na.approx.

list[c(FALSE, diff(list) >= 5)] <- NA
zoo::na.approx(list)
#[1] 1 1 1 1 4 2 3 1 1 1 3 2
...