如果r中的数据中有NA, if语句出错



我有一个in if语句的问题。我得到一个错误消息说"缺席值,其中需要TRUE/FALSE"。我试图使用if语句和for循环来计算一个新变量,但数据具有NA值,我使用的循环在找到NA值后无法进一步工作。

这是我用来创建新变量的变量:

x=c(3,3,3,2,NA,2,3,NA,3,NA)
y=c(3,6,5,4,NA,3,2,NA,3,NA)
h=c(1,2,1.6666667,2,NA,1.5,0.6666667,NA,1,NA)

这是我使用的代码,有NA值的问题:

z=rep(NA,length(y))
for(i in 1:length(x)){
if((x[i]==0 & y[i]>=3) | h[i]>=3){
z[i]=1
} else if((x==0 & y[i]<3) | h[i]<3){
z[i]=0
}
}

你能告诉我如何将NA值包含到if语句中或者我应该怎么做吗?谢谢你的回复。

我们可以通过插入is.na

NA的基础上进行更改
for(i in 1:length(x)){
if((x[i] %in% 0 & y[i]>=3 & !is.na(y[i])) | h[i]>=3 & !is.na(h[i])){
z[i]=1
} else if((x[i] %in% 0 & y[i]<3 & !is.na(y[i])) | h[i]<3 & !is.na(h[i])){
z[i]=0
}
}

您可以查看!is.na()。而且这个操作是矢量化的,所以你不需要for循环。

inds <- x == 0 & y >= 3 | h >= 3
as.integer(inds & !is.na(inds))
#[1] 0 0 0 0 0 0 0 0 0 0

没有一个值符合这里的条件。

最新更新