R无法将NaN转换为NA [英] R can't convert NaN to NA
问题描述
我有一个数据帧,其中有多个因子列,这些列包含要转换为NA
的NaN
(NaN
似乎是使用线性回归对象来预测新数据的问题).
I have a data frame with several factor columns containing NaN
's that I would like to convert to NA
's (the NaN
seems to be a problem for using linear regression objects to predict on new data).
> tester1 <- c("2", "2", "3", "4", "2", "3", NaN)
> tester1
[1] "2" "2" "3" "4" "2" "3" "NaN"
> tester1[is.nan(tester1)] = NA
> tester1
[1] "2" "2" "3" "4" "2" "3" "NaN"
> tester1[is.nan(tester1)] = "NA"
> tester1
[1] "2" "2" "3" "4" "2" "3" "NaN"
推荐答案
这是问题所在:您的向量是模式下的字符,因此当然不是数字".最后一个元素被解释为字符串"NaN".仅当向量为数字时,才使用is.nan
才有意义.如果要使字符向量中缺少一个值(以便可以通过回归函数正确处理),请使用(不带引号)NA_character_
.
Here's the problem: Your vector is character in mode, so of course it's "not a number". That last element got interpreted as the string "NaN". Using is.nan
will only make sense if the vector is numeric. If you want to make a value missing in a character vector (so that it gets handle properly by regression functions), then use (without any quotes), 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",那么您将能够使用逻辑索引:
Neither "NA" nor "NaN" are really missing in character vectors. If for some reason there were values in a factor variable that were "NaN" then you would have been able just use logical indexing:
tester1[tester1 == "NaN"] = "NA"
# but that would not really be a missing value either
# and it might screw up a factor variable anyway.
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"的元素现在是实际的缺失值,在打印中表示为.
That last result might be surprising. There is a remaining "NaN" level but none of elements is "NaN". Instead the element that was "NaN" is now a real missing value signified in print as .
这篇关于R无法将NaN转换为NA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!