【发布时间】:2019-06-26 21:34:13
【问题描述】:
我是一个相对新手的 R 用户,正在尝试与加拿大 6 家最大的银行重新创建“道琼斯指数”策略,您可以在本年度购买前一年表现最差的股票/银行。我想遍历每一行并选择前一年表现最差的列。非常感谢任何建议或提示!
我已尝试编写多个版本的 for 循环,但仍会得到奇怪的输出。在下面的代码中,我得到一个列表,其中每个项目都是相同的数字?
在代码中,我有一个数据框 (BtBB),它是银行股票从 2012 年到 2018 年的年回报率作为行,6 家银行作为列。 BtBB_min 是一个向量,它有 6 个条目,表示上一年的最低回报在哪一列(所以第一个值指向第 4 列,这是 2012 年表现最差的,第二个值是第 2 列,这是 2013 年表现最差的,等等) BtBB_ret 旨在是显示回报的输出。
#Entering data
BtBB <- data.frame(
Date = as.Date(c("2012-12-31", "2013-12-31", "2014-12-31", "2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31"), format = "%Y-%m-%d"),
CIBC = c(0.08375119, 0.13442541, 0.10052910, -0.08663862, 0.20144753, 0.11847390, -0.17023013),
RBC = c(0.151981531, 0.192551770, 0.123652150, -0.075897308, 0.225488874, 0.129635743, -0.089722358),
National = c(0.07069587, 0.14422579, 0.11880516, -0.18466828, 0.35276606, 0.15019255, -0.10634566),
BMO = c(0.08911954, 0.16348998, 0.16057054, -0.04989048, 0.23680840, 0.04162783, -0.11333135),
TD = c(0.097771953, 0.195319962, 0.108869357, -0.022878761, 0.220870206, 0.112201752, -0.078615071),
BNS = c(0.130434783, 0.156108597, -0.001806413, -0.155934248, 0.335715562, 0.085072231, -0.161119329))
BtBB_min <- apply(BtBB[-1], 1, which.min) # Finding Minimums
#Adding scalar to min vector so column numbers match properly with BtBB dataframe
BtBB_min <- BtBB_min + 1
#Removing last entry since only minimums from prior years matter, not current years
BtBB_min <- BtBB_min[-length(BtBB_min)]
#Removing first row from data frame since we want to reference current years
BtBB <- BtBB[-1,]
#Creating output vector for for loop
BtBB_ret <- vector("double", length = length(BtBB_min))
#Nested For loop where I'm having issue generating a proper output
for (h in seq_along(BtBB_ret)) {
for (i in nrow(BtBB)) {
for (j in seq_along(BtBB_min)) {
BtBB_ret[h] <- BtBB[i,BtBB_min[j]]
}
}
}
期望得到一个返回向量: .1442258, .10052910, -0.155934248, 0.3527661, 0.11847390, -0.11333135
实际得到BMO的6次回报(-0.11333135)。想不通为什么。已经解决这个问题一周了,似乎无法破解它:(
【问题讨论】: