如何将“for loop”转换为“apply family functions”

时间:2016-11-17 12:32:10

标签: r vectorization apply lag

我的数据框看起来像这样。 (它有~300,000行) 我想更快更优雅地完成这项操作。 我怎样才能克服这个问题。提前谢谢。

df <- data.frame(
   X = sample(0:1, 10, replace = T),
   Y = sample(10:20, 10, replace = T)
 )

for (i in 2:(nrow(df)))
{
   if (df$X[i] == 0)
   {
      df$X[i] = df$Y[i - 1]
   }
}

1 个答案:

答案 0 :(得分:2)

我们可以尝试lag

df$X <- ifelse(df$X == 0, lag(df$Y), df$X)

如果我们需要忽略第一行

df[2:nrow(df), ] <- with(df[2:nrow(df), ], ifelse(X == 0, lag(Y), X))