Вот в чем проблема: ваш вектор является символом в режиме, поэтому, конечно, это «не число». Этот последний элемент был интерпретирован как строка «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», вы могли бы просто использовать логическое индексирование:
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», теперь является реальным отсутствующим значением, обозначенным в печати как .
person
IRTFM
schedule
27.02.2012
setattr
из пакета data.table. Также проверьте ответ Мэтью Доула на мой вопрос ранее сегодня: stackoverflow.com/questions/9463980/ - person Matt Bannert   schedule 28.02.2012