替代 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]
pmin
和 pmax
可能有更简单的方法,但没有任何样本数据或目标描述,很难确定发生了什么。
也许这会对你有所帮助:
library(dplyr)
full_data <- full_data %>% mutate(
amount0 = if_else(amount0In > amount0Out, amount0In,amount0Out),
amount1 = if_else(amount1In > amount1Out, amount1In,amount1Out)
)
我有一个包含超过 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]
pmin
和 pmax
可能有更简单的方法,但没有任何样本数据或目标描述,很难确定发生了什么。
也许这会对你有所帮助:
library(dplyr)
full_data <- full_data %>% mutate(
amount0 = if_else(amount0In > amount0Out, amount0In,amount0Out),
amount1 = if_else(amount1In > amount1Out, amount1In,amount1Out)
)