用 2 个 for 循环填充向量
Populate vectors with 2 for loops
我可能误解了 for 循环的工作原理,但我很难理解为什么当前代码不填充向量(尽管代码本身运行,但向量显然仍然是 NA)。我想可能还有一种方法可以使用 ifelse() 对所有这些信息进行子集化,但我遇到了“编码障碍”。
问题(详述): 我正在尝试根据 2008 年总统选举周期最后 90 天的博彩市场编写 运行 选举团预测直到选举日。我证明使用两个 for 循环是合理的,因为代码需要在特定日期检查条件语句,并将特定值添加到该日期的预先存在的总和中。换句话说,如果奥巴马在某一特定州的特定投注价格高于麦凯恩,则该州的选举人票将在当天授予奥巴马,反之亦然。再次,代码运行,但向量显然保持 NA。
相关变量的关键字
EV,该特定州的选举人票
X,分配给每个观察值的唯一值
日期,日期 class
PriceD,民主党候选人的投注价格
PriceR,代表候选人的投注价格
DaysToEday,一个数值,表示可变日期与选举日之间的差异 (2008-11-04)
问题中的代码
Obama08.ECvotesByDay <- McCain08.ECvotesByDay <- rep(NA, 90)
for (i in 1:90) {
for (j in 1:nrow(subset(mpres08, mpres08$DaysToEday <= 90))){
if(mpres08$PriceD[j] > mpres08$PriceR[j]) {
Obama08.ECvotesByDay[i] <- Obama08.ECvotesByDay[i]+mpres08$EV[j]
}
else {
McCain08.ECvotesByDay[i] <- McCain08.ECvotesByDay[i]+mpres08$EV[j]
}
}
}
数据输入(五行)
structure(list(state = c("AK", "AK", "AK", "AK", "AK"), state.name = c("Alaska",
"Alaska", "Alaska", "Alaska", "Alaska"), Obama = c(38L, 38L,
38L, 38L, 38L), McCain = c(59L, 59L, 59L, 59L, 59L), EV = c(3L,
3L, 3L, 3L, 3L), X = c(24073L, 25195L, 8773L, 25603L, 25246L),
day = structure(c(13937, 13959, 13637, 13967, 13960), class = "Date"),
PriceD = c(7.5, 7.5, 10, 8, 7.5), VolumeD = c(0L, 0L, 0L,
0L, 0L), PriceR = c(92.5, 92.5, 90, 92, 92.5), VolumeR = c(0L,
0L, 0L, 0L, 0L), DaysToEday = c(250, 228, 550, 220, 227)), row.names = c(NA,
5L), class = "data.frame")
您正在向 NA 添加一个数字,对于 R,结果为 NA。
Obama08.ECvotesByDay[i]
和 McCain08.ECvotesByDay[i]
初始化为 NA
。在 R 中,如果您尝试使用 NA
进行算术运算,它会保持 NA
(例如 NA + 1
结果为 NA
)。根据对你来说什么是中性结果,你可以在开头用 0:
初始化向量
Obama08.ECvotesByDay <- McCain08.ECvotesByDay <- rep(0, 90)
我可能误解了 for 循环的工作原理,但我很难理解为什么当前代码不填充向量(尽管代码本身运行,但向量显然仍然是 NA)。我想可能还有一种方法可以使用 ifelse() 对所有这些信息进行子集化,但我遇到了“编码障碍”。
问题(详述): 我正在尝试根据 2008 年总统选举周期最后 90 天的博彩市场编写 运行 选举团预测直到选举日。我证明使用两个 for 循环是合理的,因为代码需要在特定日期检查条件语句,并将特定值添加到该日期的预先存在的总和中。换句话说,如果奥巴马在某一特定州的特定投注价格高于麦凯恩,则该州的选举人票将在当天授予奥巴马,反之亦然。再次,代码运行,但向量显然保持 NA。
相关变量的关键字
EV,该特定州的选举人票
X,分配给每个观察值的唯一值
日期,日期 class
PriceD,民主党候选人的投注价格
PriceR,代表候选人的投注价格
DaysToEday,一个数值,表示可变日期与选举日之间的差异 (2008-11-04)
问题中的代码
Obama08.ECvotesByDay <- McCain08.ECvotesByDay <- rep(NA, 90)
for (i in 1:90) {
for (j in 1:nrow(subset(mpres08, mpres08$DaysToEday <= 90))){
if(mpres08$PriceD[j] > mpres08$PriceR[j]) {
Obama08.ECvotesByDay[i] <- Obama08.ECvotesByDay[i]+mpres08$EV[j]
}
else {
McCain08.ECvotesByDay[i] <- McCain08.ECvotesByDay[i]+mpres08$EV[j]
}
}
}
数据输入(五行)
structure(list(state = c("AK", "AK", "AK", "AK", "AK"), state.name = c("Alaska",
"Alaska", "Alaska", "Alaska", "Alaska"), Obama = c(38L, 38L,
38L, 38L, 38L), McCain = c(59L, 59L, 59L, 59L, 59L), EV = c(3L,
3L, 3L, 3L, 3L), X = c(24073L, 25195L, 8773L, 25603L, 25246L),
day = structure(c(13937, 13959, 13637, 13967, 13960), class = "Date"),
PriceD = c(7.5, 7.5, 10, 8, 7.5), VolumeD = c(0L, 0L, 0L,
0L, 0L), PriceR = c(92.5, 92.5, 90, 92, 92.5), VolumeR = c(0L,
0L, 0L, 0L, 0L), DaysToEday = c(250, 228, 550, 220, 227)), row.names = c(NA,
5L), class = "data.frame")
您正在向 NA 添加一个数字,对于 R,结果为 NA。
Obama08.ECvotesByDay[i]
和 McCain08.ECvotesByDay[i]
初始化为 NA
。在 R 中,如果您尝试使用 NA
进行算术运算,它会保持 NA
(例如 NA + 1
结果为 NA
)。根据对你来说什么是中性结果,你可以在开头用 0:
Obama08.ECvotesByDay <- McCain08.ECvotesByDay <- rep(0, 90)