如何将对象值设置为同一变量的滞后值?

时间:2016-03-04 20:20:07

标签: r lag

我需要更新对象值=="修复"以便它们更新为同一变量中的进程值的值。我的问题是,当前一个值也是=="修复"它没有看到更新的值(因为它显然还没有更新,为什么不呢?)。我担心我没有词汇可以提出正确的问题,所以这就是它的样子。

所以如果这是我的数据框(df):

row     x
1       a
2       b
3       fix 
4       fix 
5       fix 
6       b
7       a
8       fix 
9       fix 

我运行我的代码:

df$x2 <- ifelse( df$x=="fix",lag(df$x2),df$x) 

我明白了:

row     x       x2 
1       a       a
2       b       b
3       fix     b
4       fix     fix
5       fix     fix
6       b       b
7       a       a
8       fix     a
9       fix     fix

但我想要的是:

row     x       x2
1       a       a
2       b       b
3       fix     b
4       fix     b
5       fix     b
6       b       b
7       a       a
8       fix     a
9       fix     a

任何帮助都将受到赞赏(包括如何更好地构建我的问题的问题和/或标题)。

1 个答案:

答案 0 :(得分:0)

也许不是最快的(因为我用于循环),但工作:

df2 <- data.frame(x=c("a","b", "fix", "fix", "fix", "b", "a", "fix", "fix"), stringsAsFactors = FALSE)
#df2 <- cbind(df2, data.frame(x2=character(nrow(df2)), stringsAsFactors = FALSE))

for(i in 1:nrow(df2))
{
   if(df2$x[i]=="fix")
   {
       df2$x2[i] <- df2$x2[i-1]   
   }
   else
   {
      df2$x2[i] <- df2$x[i]   
   }
}
df2