Расчет различий между следующими уменьшающимися значениями - PullRequest
1 голос
/ 06 ноября 2019

Я хотел бы рассчитать разницу между значениями, когда последовательности уменьшаются. Есть ли какая-либо функция, считающая это? Потому что я не могу найти ничего похожего в Интернете.

Мой пример:

data.frame(x=c("0", "0", "2", "2","3", "0", "4", "0", "1"), 
           diff=c("0","0", "0", "0", "0","3", "0", "4", "0"))

  x diff
1 0    0
2 0    0
3 2    0
4 2    0
5 3    0
6 0    3
7 4    0
8 0    4
9 1    0

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

Вы можете просто найти разницу, свести ее на нет и заменить все отрицательные значения (показывая увеличение данных) на 0

#convert to numeric first
dd[] <-lapply(dd, function(i)as.numeric(as.character(i)))

replace(-diff(dd$x), -diff(dd$x) < 0 ,  0)
#[1] 0 0 0 0 3 0 4 0

Если у вас есть NA, то один из способов справиться с ними - сделать их равнымик предыдущему значению, т.е.

x <- c(5, NA, 2) #Notice how I DON'T put them in quotes so it's numeric
x1 <- replace(x, is.na(x), x[which(is.na(x)) - 1])

#Using the same method as above on the new x1,
c(0, replace(-diff(x1), - diff(x1) < 0, 0))
#[1] 0 0 3
2 голосов
/ 06 ноября 2019

Другой способ использования diff

inds <- c(0, diff(df$x))
-inds * (inds < 0)
#[1] 0 0 0 0 0 3 0 4 0

data

df <- type.convert(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...