Заменить значение на основе значения до - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть тиббл с переменными, которые используют «99» или «999» в качестве конгломерата всех значений выше значения ранее.Как бы изменить это значение до + 2.

Пример ниже.

level <- c(1,2,3,4,99)
variable <- c('age', 'age','age','age','age')
value <- c(.5, .75, 1, 1.25, 1.89)
d <- data.frame(Variable = variable, Level = level, value = value)

Я бы хотел получить

Variable     Level     Value
age          1         .5
age          2         .75
age          3         1
age          4         1.25
age          6         1.89

Я недаже уверен, с чего начать при выборе значения до 99, исходя из условия, что начальное значение равно 99.

Возможно

d$Level <- if(d$Level = 99, nrow(-1) + 2, d$Level)

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Создать новый вектор с запаздывающими значениями

temp=c(0,d$Level[1:(length(d$Level)-1)])+2
d$Level=ifelse(d$Level==99,temp,d$Level)
0 голосов
/ 20 декабря 2018

Я бы использовал data.table::shift():

with(d, ifelse(Level %in% c(99, 999), shift(Level) + 2, Level))
[1] 1 2 3 4 6

Но чтобы сделать это в base R, вы можете определить вспомогательную функцию:

baseShiftBy1 <- function(x) c(NA, x[-length(x)])
with(d, ifelse(Level %in% c(99, 999), baseShiftBy1(Level) + 2, Level))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...