问题在于:你的向量是字符类型,所以当然是“不是数字”的。这个最后一个元素被解释为字符串“NaN”。只有在向量是数值类型时使用 is.nan
才有意义。如果你想让字符型向量中的某个值缺失(以便回归函数正确处理),则可以使用(不带引号)NA_character_
。
> tester1 <- c("2", "2", "3", "4", "2", "3", NA_character_)
> tester1
[1] "2" "2" "3" "4" "2" "3" NA
> is.na(tester1)
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
无论是"NA"还是"NaN"都不算是字符向量中真正的缺失值。如果因某种原因一个因子变量中出现了"NaN"这样的值,那么你仍然可以使用逻辑索引:
既然您提到了这个问题,我想说,当我们在处理数据时,"NA"表示缺失的值,"NaN"则表示非数字的值。它们有着不同的含义和用途,需要根据具体情况进行区分。在字符向量中,它们实际上都不算是真正的缺失值。
如果因子变量中存在"NaN"这样的值,你可以使用逻辑索引来快速过滤掉这些值。例如:
tester1[tester1 == "NaN"] = "NA"
tester1[tester1=="NaN"] <- "NA"
Warning message:
In `[<-.factor`(`*tmp*`, tester1 == "NaN", value = "NA") :
invalid factor level, NAs generated
tester1 <- factor(c("2", "2", "3", "4", "2", "3", NaN))
> tester1[tester1 =="NaN"] <- NA_character_
> tester1
[1] 2 2 3 4 2 3 <NA>
Levels: 2 3 4 NaN
最后的结果可能会让人感到惊讶。虽然仍有一个"NaN"级别,但其中没有任何元素是"NaN"。相反,之前为"NaN"的元素现在是一个真正的缺失值,在打印输出中表示为"."。
data.table
包中的setattr
函数。还可以查看MatthewDowle在我今天早些时候提出的问题的答案:https://dev59.com/kWDVa4cB1Zd3GeqPhuiz - Matt Bannert