r - 如何编写一个循环来根据条件查找最大值及其对应的滞后值

标签 r if-statement for-loop

我刚刚编写了一个 block 来找出互相关值中的最大峰值,但是当我运行循环代码时根本没有输出。所以我只是想问一下我编写循环的逻辑是否有问题,或者有什么我可以尝试修改顺序的东西。

我想要的输出逻辑:

for (i in 1:n) {
  if (y[i]=max(y[i]) & x[i]>0) {
     p=x[i]
  }
  else if (y[i]=min(y[i] & x[i]<0) {
     p=-x[i]
  }
}

其余的省略,因为他们什么也没输入。请注意,x[i]y[i] 位于同一数据框中。

下面是我的代码(我发现我的 d1 输入犯了一个大错误):

设置数据框(我刚刚上传了我的 ccf 结果的输出):

lag<-c(-26:26)
acf<-c(0.047407605,-0.082137676,0.034121452,0.039142063,-0.043329145,-0.020623160,0.039402880,0.015249114,-0.035820024,-0.015923312,0.037330662,0.006072103,-0.031716579,0.011451683,-0.010197626,-0.002019121,0.053034576,-0.046888611,-0.014243574,0.062941934,-0.008920250,-0.069821500,0.055471320,-0.047680416,0.041748427,-0.397052734,0.753759104,-0.354801338,0.040349059,-0.082996566,0.093101698,-0.120570604,0.052011432,-0.007482147,0.045102472,-0.064384729,0.048119729,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
d1<-data.frame(lag,acf)

for(i in 1:length(d1[,2])) {
  if (d1[i,2] == max(d1[,2])) {
    if(d1[i,1]>0){
      cat(d[i,1])
      cat("CHIE lags CHIQ \n")
      p=d1[i,1]
      } else {
        if (d1[i,2] == min(d1[,2]) & d1[i,1]<0) {
          d=-d1[i,2]
          cat(d)
          cat("CHIE leads CHIQ \n")
          p=d
        }
      }
}

很抱歉,我确实忘记了一些 C 语言的基本循环知识,并且想将其带回我的脑海中。非常感谢您的帮助!

P.S 我测试了一些基本数据框架,它确实有效,但不幸的是它不适用于我自己的数据集(没有错误,但没有输出)。所以我猜测ccf函数的输出是否也有问题。

最佳答案

您的代码中没有输出,因为您缺少“}”。如果没有错误消息,通常意味着您尚未关闭循环。运行下面的代码,您会发现它有效。

d1 <- data.frame(runif(100), runif(100))
colnames(d1) <- c('x','y')

for(i in 1:length(d1[,2])) {
  if (d1[i,2] == max(d1[,2])) {
    if(d1[i,1]>0){
      cat(d1[i,1])
      cat("CHIE lags CHIQ \n")
      p=d1[i,1]
  } else {
    if (d1[i,2] == min(d1[,2]) & d1[i,1]<0) {
      d=-d1[i,2]
      cat(d1)
      cat("CHIE leads CHIQ \n")
      p=d1
    }
  }
}
}

然而,还有更优雅的方法来查找每列中最大值的索引。请参阅?which.max

tester <- apply(d1, FUN=which.max, 2)

现在您可以使用 tester[1] 和 tester[2] 的值并替换循环。

关于r - 如何编写一个循环来根据条件查找最大值及其对应的滞后值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114781/

相关文章:

debugging - R,调试行号

r - 更快相当于 group_by %>% 在 R 中扩展

C# 检查按钮是否被第二次点击

python - 退出 Python 函数调用

python - 迭代字典列表

r - 将一个数据帧中的数据匹配到另一个数据帧

r - 根据 if-else 语句为水平图着色

javascript - 如何在 JavaScript 中使用嵌套的 setTimeout() 函数打破 for 循环?

c++ - 如何实现递增数据的循环

r - 如何将数据标签表达为金钱