r - 我在 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}
}```
解决方案
推荐阅读
- optimization - 使用 PuLP 理解价格优化并制定问题
- python - gunicorn 无法启动烧瓶服务器:ModuleNotFoundError: No module named 'requests'
- anaconda - Anaconda Navigator GUI 中的 JupyterLab 未更新
- nginx - 在 nginx 中启用盗链保护
- android - 未获得正确的存储量值(内部)
- python - 如何将表格(xlsx 或 csv)转换为 Python 中的字符串列表?
- reactjs - 映射 axios 响应,然后将其用于另一个响应
- python - conda 和 pip 从哪里得到他们的包?
- python - 在对数图上设置自定义科学记数法 y
- postgresql - 有没有一种方法可以在一张巨大的桌子上的 postgres 12 中执行 ALTER Column 而无需等待一生?