替代 R 中 for 循环中的 if 语句

Alternative to if statements inside for loops in R

我有一个包含超过 400'000 行的数据框。我正在尝试按以下方式组织我的数据:

for (i in 1:nrow(full_data)) {
    if (full_data$amount0In[i] > full_data$amount0Out[i]) {
      full_data$amount0[i] <- full_data$amount0In[i]
      full_data$amount1[i] <- -full_data$amount1Out[i]
    } else {
      full_data$amount0[i] <- -full_data$amount0Out[i]
      full_data$amount1[i] <- full_data$amount1In[i]
    }
  }

此代码有效,但计算时间很长。是否有任何替代方法(例如矢量化)来提高此代码的效率?

借助 R 的矢量化,您可以执行此操作 - 这与您的代码等效,但会更快,因为它是矢量化的。

In_gt_Out <- full_data$amount0In > full_data$amount0Out
full_data$amount0[In_gt_Out] <-  full_data$amount0In[In_gt_Out]
full_data$amount1[In_gt_Out] <- -full_data$amount1Out[In_gt_Out]

full_data$amount0[!In_gt_Out] <- -full_data$amount0Out[!In_gt_Out]
full_data$amount1[!In_gt_Out] <-  full_data$amount1In[!In_gt_Out]

pminpmax 可能有更简单的方法,但没有任何样本数据或目标描述,很难确定发生了什么。

也许这会对你有所帮助:

library(dplyr)
full_data <- full_data %>% mutate(
      amount0 = if_else(amount0In > amount0Out, amount0In,amount0Out),
      amount1 = if_else(amount1In > amount1Out, amount1In,amount1Out)
)