首页 > 解决方案 > 我在 for 和 if 循环中遇到错误,我认为在 If 循环中,因为错误读取需要 True/False 的缺失值

问题描述

我正在尝试使用 for 循环遍历数据框中的每一行,如果行中的其他值满足某些条件,我正在使用 if else 循环来更改数据框中的值。
当我运行代码时,我收到错误消息

if ((RouteType == 7 | RouteType == 9) & (SGR > 5) & (0 < SGR30) & 中的错误:需要 TRUE/FALSE 的地方缺少值

我的数据输入正确。

这是我的代码:

library(MASS)
library(plyr)
library(dplyr)
library(tidyverse)

k=#The MAin Loop will be on all the sample FHWA data
  for (k in 1:NROW(DataWSGR)){

  RouteType    <-  DataWSGR[k,4]
  FactoredAADT <-  DataWSGR[k,11]
  SGR          <-  DataWSGR[k,17]  
  SGR10        <-  DataWSGR[k,18]
  SGR20        <-  DataWSGR[k,19]
  SGR30        <-  DataWSGR[k,20]
  Count10      <-  DataWSGR[k,21]
  Count20      <-  DataWSGR[k,22]
  Count30      <-  DataWSGR[k,23]
  Recommended  <-  DataWSGR[k,24]

    # 30 year 0 < SGR <= 5
if((RouteType == 7 | RouteType == 9) & (SGR > 5 ) & (0 < SGR30) & (SGR30 <= 5 )) 
  {DataWSGR[k,24] <- ((SGR30*3/10*Count30) + Count30)} else

    # 20 year 0 < SGR <= 5    
if((RouteType == 7 | RouteType == 9) & (SGR > 5 ) & (0 < SGR20) & (SGR20 <= 5 ))
  {DataWSGR[k,24] <- ((SGR20*2/10*Count20) + Count20)} else

    # 10 Year 0 < SGR < 5    
if((RouteType == 7 | RouteType == 9) & (SGR > 5 ) & (0 < SGR10) & (SGR10 <= 5 ))
  {DataWSGR[k,24] <- ((SGR10*1/10*Count10) + Count10)} else

    # 10, 20, and 30 year SGR > 5    
if((RouteType == 7 | RouteType == 9) & (SGR > 5 ) & 
   (SGR30 > 5 | !is.na(SGR30)) & (SGR20 > 5 | !is.na(SGR20)) & (SGR10 > 5 | !is.na(SGR10)) )
{DataWSGR[k,24] <- ((2/10*FactoredAADT*5) + FactoredAADT)} else

  # 10, 20, and 30 year SGR < 0  
if((RouteType == 7 | RouteType == 9) & (SGR > 5 ) & 
   (SGR30 < 0 | !is.na(SGR30)) & (SGR20 < 0 | !is.na(SGR20)) & (SGR10 < 0 | !is.na(SGR10)) )
{DataWSGR[k,24] <- ((2/10*FactoredAADT*1) + FactoredAADT)} else
{next}
}```

标签: r

解决方案


推荐阅读