【问题标题】:Error in if statement with NA in data in R [duplicate]R中数据中带有NA的if语句出错[重复]
【发布时间】:2021-06-01 03:10:42
【问题描述】:

我的 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 语句中,或者我应该怎么做? 感谢您的回复。

【问题讨论】:

标签: r for-loop if-statement na


【解决方案1】:

我们可以根据NA插入is.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
    }
}

【讨论】:

    【解决方案2】:

    您可以通过!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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 2020-05-01
      • 2016-07-25
      相关资源
      最近更新 更多