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