我对使用'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)
答案 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)