首页 > 解决方案 > R - 在 for 循环中创建和更新参考值

问题描述

编辑:

我不知道函数cummax,再次感谢您!我会尝试将它集成到我的循环逻辑中,这也会根据我的需要提供一个输出列。

标签: r

解决方案


我认为您不需要任何循环。

set.seed(1)在前面,为了重现性,我在生成上面的帧之前设置了我的随机种子。这使您可以看到我在下面创建的“完全相同”的框架。

head(within(df, {
  isbetter <- c(TRUE, diff(payoff) > 0)
  maxsofar <- cummax(df$payoff)
  maxsofar <- c(0, maxsofar[-length(maxsofar)])
  isbestsofar <- as.integer(payoff > maxsofar)
}), n=20)
#     X1 X2 X3 X4 X5 X6 X7 X8 ID round     payoff isbestsofar  maxsofar isbetter
# 1    0  1  1  0  1  1  1  1  1     1 0.18776846           1 0.0000000     TRUE
# 21   1  1  0  0  0  0  0  1  1     2 0.50475902           1 0.1877685     TRUE
# 41   1  0  0  0  0  1  0  0  1     3 0.02728685           0 0.5047590    FALSE
# 61   1  1  0  0  0  0  1  0  1     4 0.49629785           0 0.5047590     TRUE
# 81   0  0  0  0  1  1  1  0  1     5 0.94735171           1 0.5047590     TRUE
# 101  1  1  1  0  1  1  0  1  1     6 0.38118213           0 0.9473517    FALSE
# 121  1  1  0  1  0  0  1  0  1     7 0.69821373           0 0.9473517     TRUE
# 141  1  1  0  0  1  0  1  1  1     8 0.68876581           0 0.9473517    FALSE
# 161  0  0  0  0  1  0  0  0  1     9 0.47773068           0 0.9473517    FALSE
# 181  0  1  0  1  1  0  0  1  1    10 0.27334761           0 0.9473517    FALSE
# 201  0  1  0  1  1  0  1  0  1    11 0.75691633           0 0.9473517     TRUE
# 221  0  0  1  1  1  0  1  0  1    12 0.24753206           0 0.9473517    FALSE
# 241  0  0  0  1  0  1  1  0  1    13 0.52133948           0 0.9473517     TRUE
# 261  1  1  0  0  1  0  0  0  1    14 0.61284324           0 0.9473517     TRUE
# 281  0  1  0  1  1  0  1  0  1    15 0.09504998           0 0.9473517    FALSE
# 301  1  1  1  0  0  1  0  0  1    16 0.56575876           0 0.9473517     TRUE
# 321  1  0  1  1  0  1  1  1  1    17 0.01687416           0 0.9473517    FALSE
# 341  1  1  0  1  0  1  0  1  1    18 0.19987888           0 0.9473517     TRUE
# 361  0  0  1  1  1  0  0  1  1    19 0.41758380           0 0.9473517     TRUE
# 381  0  0  1  0  1  1  0  0  1    20 0.20550609           0 0.9473517    FALSE

我用于在;within中简单地创建/处理列 data.frame这可以很容易地逐字df$isbetter <- c(TRUE, diff(df$payoff) > 0),with dplyr, withdata.table或可能以其他方式完成。选择,逻辑和结果应该实际上是相同的(也许除了列顺序)。


推荐阅读