代码之家  ›  专栏  ›  技术社区  ›  Jordan

基于之前的值替换值

r
  •  2
  • Jordan  · 技术社区  · 7 年前

    我有一个带有变量的tibble,它使用“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 回复  |  直到 7 年前
        1
  •  2
  •   user2974951    7 年前

    用滞后值创建新矢量

    temp=c(0,d$Level[1:(length(d$Level)-1)])+2
    d$Level=ifelse(d$Level==99,temp,d$Level)
    
        2
  •  3
  •   s_baldur    7 年前

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