如何将 "for loop" 转换为 "apply family functions"

How to convert "for loop" to "apply family functions"

我的数据框如下所示。 (它有大约 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]
   }
}

我们可以试试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))