错误:如果R

时间:2018-04-24 12:09:14

标签: r if-statement

我一直在这里查看类似的问题而且我看不到,即使我看到了同样的错误信息。

那就说我有一个数据:

temp = data.frame(ID = c(1:5),
Pl = c("11","12",NA,"14",NA), Pl2 = c("11","11","12","14","14"))
ID   Pl Pl2
 1   11  11
 2   12  11
 3 <NA>  12
 4   14  14
 5 <NA>  14`

我想用条件创建第四列:

  • 如果Pl1 == Pl2,那么第四列的所需输出为0
  • 如果Pl1 == NA,那么第四列的所需输出为NA
  • 了解Pl1!= Pl2的逻辑条件, 然后第四列的所需输出为1

最后,我想出了这段代码,我收到了错误消息:

for (i in nrow(temp)){
  if (temp[i,2] == temp[i,3]) { 
    temp[i,4] = "0"
  } else if (is.na(temp[i,2])) {
    temp[i,4] = NA
  } else (temp[i,4] = "1")
}

Error in if (temp[i, 2] == temp[i, 3]) { : 
  missing value where TRUE/FALSE needed

所以我无法看到任何语法/运算符错误,但可能有一些合乎逻辑的事情?

1 个答案:

答案 0 :(得分:2)

我们可以进行比较并将其强制转换为二进制

with(temp, as.integer(Pl != Pl2))

或者

with(temp, as.integer(!(NA^(is.na(Pl))* (Pl == Pl2)))) 

在OP&#39;代码中,它循环遍历nrow,即一个数字,而不是1:nrow(temp)或更正确seq_len(nrow(temp))

for (i in 1:nrow(temp)){
  if (temp[i,2] == temp[i,3] & !is.na(temp[i,2])) { 
    temp[i,4] <- "0"
  }else if (is.na(temp[i,2])){
   temp[i,4] <- NA
   } else {
     temp[i,4] <- "1"
   }

}

temp[,4]
#[1] "0" "1" NA  "0" NA