Расчет различий в векторе для конкретных элементов - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу вычислить разницу между элементами в векторе, используя функцию diff.Но я хочу сделать это только для элементов, которые принимают определенное значение.

Допустим, у меня есть вектор

v <- c(0,1,3,5,0,7,6,0,9,0,7,2)

, и я хочу только отличия от нулей (или любыхдругое значение).Так что я бы получил результат 1,7,9,7.

Я хочу написать что-то вроде:

diff(v for which v == 0)

Но я не знаю, как.

1 Ответ

1 голос
/ 06 апреля 2019

Так как вы хотите использовать diff для элементов с 0, мы можем выбрать элементы, которые находятся рядом с 0, потому что любое число, вычтенное 0, является тем же числом.

v[which(v == 0) + 1]
#[1] 1 7 9 7

Если есть любое другое число, кроме 0, которое мы хотим использовать diff, мы можем выбрать следующее число и вычесть его из этого числа.

v[which(v == 0) + 1] - v[which(v == 0)]
#[1] 1 7 9 7

С 7

v[which(v == 7) + 1] - v[which(v == 7)]
#[1] -1 -5

Если мы хотим использовать diff, мы можем получить индексы, которые равны 0 и числу рядом с ним, split это на основе вхождения 0 и вычислить разницу, используя diff.

inds <- which(v == 0)
v1 <- v[sort(c(inds, inds + 1))]
sapply(split(v1, cumsum(v1 == 0)), diff)

#1 2 3 4 
#1 7 9 7 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...