r - R - 在 for 循环中创建和更新参考值
问题描述
编辑:
我不知道函数cummax,再次感谢您!我会尝试将它集成到我的循环逻辑中,这也会根据我的需要提供一个输出列。
解决方案
我认为您不需要任何循环。
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
或可能以其他方式完成。选择,逻辑和结果应该实际上是相同的(也许除了列顺序)。
推荐阅读
- memory - 字符数组的堆栈分配导致分段错误,而堆分配不会
- dns - 使用反向区域文件绑定设置问题
- c - 打印出特定间隔之间的完美数字
- linux - 如何将字符串名称与文件名匹配?
- html - 限制空间文本可以占用 div
- amazon-web-services - AWS API Gateway:用户匿名无权执行 API
- javascript - MM:SS 格式的默认时间 - Django
- android - 为什么我无法更改 Android 虚拟设备配置中的“仿真性能:图形”设置?
- entity-framework - 如何使用 EF FromSql 编写子句?
- javascript - 如何在java脚本中获取字符串的一部分