R 我尝试使用if-else循环检查多个列的数据范围,如何使其忽略数据中的NAs

R 我尝试使用if-else循环检查多个列的数据范围,如何使其忽略数据中的NAs,r,R,我试图检查数据帧中三列中的数字,如果它们在某个范围内,我需要某个输出。我有这部分代码,但我的一个测试想知道这三个是否都是负数,然后我得到一个特定的输出。我的问题是某些列中的某些数据是NA。我想在我的逻辑中忽略NAs。有办法做到这一点吗?下面是我的代码示例 if((DataWSGR$RouteType == 7 | DataWSGR$RouteType == 9) & (DataWSGR$SGR > 5 ) & (0 < DataWSGR$`30_Year_SGR` &

我试图检查数据帧中三列中的数字,如果它们在某个范围内,我需要某个输出。我有这部分代码,但我的一个测试想知道这三个是否都是负数,然后我得到一个特定的输出。我的问题是某些列中的某些数据是NA。我想在我的逻辑中忽略NAs。有办法做到这一点吗?下面是我的代码示例

if((DataWSGR$RouteType == 7 | DataWSGR$RouteType == 9) & (DataWSGR$SGR > 5 ) & (0 < DataWSGR$`30_Year_SGR` < 5) & (0 < DataWSGR$`20_Year_SGR` < 5) & (0 < DataWSGR$`10_Year_SGR` < 5)) {}
if((DataWSGR$RouteType==7 | DataWSGR$RouteType==9)和(DataWSGR$SGR>5)和(0

10年期、20年期和30年期SGR是其中包含NAs的列

在修正范围条件后,我认为您可以在最后三个条件中添加
| is.na(var)

if ((DataWSGR$RouteType == 7 |
     DataWSGR$RouteType == 9)) &
    (DataWSGR$SGR > 5) &
    (DataWSGR$`30_Year_SGR` > 0 & DataWSGR$`30_Year_SGR` < 5 | is.na(DataWSGR$`30_Year_SGR`)) &
    (DataWSGR$`20_Year_SGR` > 0 & DataWSGR$`20_Year_SGR` < 5 | is.na(DataWSGR$`20_Year_SGR`)) &
    (DataWSGR$`10_Year_SGR` > 0 & DataWSGR$`10_Year_SGR` < 5 | is.na(DataWSGR$`10_Year_SGR`))) {
}

嗨,安迪,你能提供一个可重复的例子吗?
0
means?
df <- data.frame(
  route_type = c(7, 6, 9),
  sgr = c(6, 3, 6),
  sgr_30 = c(3, 1, NA),
  sgr_20 = c(1, 1, NA),
  sgr_10 = c(2, 1, NA)
)

for (i in 1:nrow(df)) {
  if (
    (df$route_type[i] == 7 | df$route_type[i] == 9) &
    (df$sgr[i] > 5) &
    (df$sgr_30[1] > 0 & df$sgr_30[i] < 5 | is.na(df$sgr_30[i])) &
    (df$sgr_20[1] > 0 & df$sgr_20[i] < 5 | is.na(df$sgr_20[i])) &
    (df$sgr_10[1] > 0 & df$sgr_10[i] < 5 | is.na(df$sgr_10[i]))
  ) {
    print(paste("In range in row", i))
  }
}