【问题标题】:Simple nested for loop issue简单的嵌套for循环问题
【发布时间】:2016-04-14 22:11:52
【问题描述】:

在尝试在大型数据帧中实现嵌套 for 循环时,我意识到嵌套 for 循环并没有产生我期望的结果。这是我的问题的摘录。

df <- data.frame(nrow = 20, ncol = 1)
df <- data.frame(  LastPrice = c( 1221, 1220, 1220, 1217, 1216,  1218 , 1216, 1216, 1217, 1220, 1219, 1218, 1220, 1216, 1217, 1218, 1218, 1207, 1206, 1205))
for(j in 1:20) {for (i in 1:10) {df$SignalBinary[j] <- ifelse (df$LastPrice[j+i] == 1216, 1, 0)}}

我希望并希望嵌套的 for 循环将 SignalBinary 向量添加到具有以下值的 df 数据帧:“1 1 1 1 1 1 1 1 1 1 NA NA NA NA NA NA NA NA NA NA”

  • 前 10 行显示“1”,因为在下面 10 行中的至少一个中,每行都有 1216
  • “NA”在后面 10 上,因为对于那些 i 循环超出了向量长度

相反,df$SignalBinary 变为 "0 0 0 1 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA"

不明白。为什么只注册一个1216?非常感谢!

【问题讨论】:

  • 你的第一行是为了什么?另外,因为在下面的 10 行中的至少一个中每个都有 1216,你的意思是什么?下面是什么?您的意思是 1216 是否存在于第 11-20 行?
  • 猜第一行没有必要。意味着在第 02-11 行中至少出现一次以记录第 1 行中的 1,在第 03-12 行中至少出现一次以在第 2 行中记录 1 ...并且在第 11-20 行中至少出现一次以在第 1 行中记录 1第 10 行。谢谢。

标签: r for-loop nested-loops


【解决方案1】:

你忘了在第二个循环中求和,所以它只在最后一个 i 是 2016 时匹配。试试这个:

for(j in 1:20) {
    tmp <- 0
    for (i in 1:10) 
        tmp <- tmp + ifelse(df$LastPrice[j+i] == 1216, 1, 0)
    df$SignalBinary[j] <- as.integer(tmp>0)
}

或者没有临时变量:

df$SignalBinary[j] <- 0
for(j in 1:20) {
    for(i in 1:10) 
        df$SignalBinary[j] <- as.integer(df$SignalBinary[j] || ifelse (df$LastPrice[j+i] == 1216, 1, 0));
        }

【讨论】:

  • 我很谦虚。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多