我一直在这里查看类似的问题而且我看不到,即使我看到了同样的错误信息。
那就说我有一个数据:
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
所以我无法看到任何语法/运算符错误,但可能有一些合乎逻辑的事情?
答案 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