根据之前的价值替换价值

时间:2018-12-20 12:31:43

标签: r

我对使用'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 :(得分:3)

我会使用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))

答案 1 :(得分:2)

使用滞后值创建新向量

temp=c(0,d$Level[1:(length(d$Level)-1)])+2
d$Level=ifelse(d$Level==99,temp,d$Level)