【问题标题】:How to convert "for loop" to "apply family functions"如何将“for循环”转换为“应用族函数”
【发布时间】:2016-11-17 12:32:10
【问题描述】:

我的数据框看起来像这样。 (它有 ~ 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]
   }
}

【问题讨论】:

  • 这称为“矢量化”。如“如何向量化这个滞后计算?”

标签: r vectorization apply lag


【解决方案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))

【讨论】:

  • 如果我们在 "if" 语句中有 2 个赋值怎么办? “ifelse”是否也有类似的作用?
  • @xfactor 我不确定我是否完全理解你。但是,大多数情况下,如果我们想为另一列赋值,那么我们需要编写另一行类似的代码。
猜你喜欢
  • 2020-10-01
  • 2020-06-03
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多