用 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)