Jaka jest różnica między i NA?
Mam czynnik o nazwie dym z poziomami " Y " I "N". Brakujące wartości zostały zastąpione przez NA (od początkowego poziomu "NULL"). Jednak gdy widzę czynnik dostaję coś takiego:
head(SMOKE)
N N <NA> Y Y N
Levels: Y N
Dlaczego r wyświetla NA
jako <NA>
? A jest jakaś różnica?
2 answers
Gdy mamy do czynienia z factors
, gdy NA
jest zawinięty w nawiasy kątowe (<NA>
), oznacza to, że w rzeczywistości jest to NA.
Gdy jest NA
bez nawiasów, to jest Nie NA, ale raczej odpowiednim czynnikiem, którego etykietą jest "NA"
# Note a 'real' NA and a string with the word "NA"
x <- factor(c("hello", NA, "world", "NA"))
x
[1] hello <NA> world NA
Levels: hello NA world <~~ The string appears as a level, the actual NA does not.
as.numeric(x)
[1] 1 NA 3 2 <~~ The string has a numeric value (here, 2, alphabetically)
The NA's numeric value is just NA
Edit to answer @ Arun ' s question:
R
po prostu próbuje odróżnić łańcuch, którego wartością są dwie litery "NA"
, a rzeczywistą brakującą wartością NA
Tak więc różnica, którą widzisz podczas wyświetlania df
versus df$y
. Przykład:
df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)
Zwróć uwagę na dwa różne style NA:
> df
x y
1 1 a
2 2 <NA>
3 3 c
4 4 NA
Jednakże, jeśli spojrzymy tylko na 'df$y'
[1] "a" NA "c" "NA"
Ale jeśli usuniemy cudzysłów (podobny do tego, co widzimy podczas drukowania danych.ramka do konsoli):
print(df$y, quote=FALSE)
[1] a <NA> c NA
I tak, po raz kolejny mamy rozróżnienie NA
za pomocą nawiasów kątowych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-01 20:43:37
Jest to po prostu sposób, w jaki r wyświetla NA
w współczynniku:
> as.factor(NA)
[1] <NA>
Levels:
>
> f <- factor(c(1:3, NA))
> levels(f)
[1] "1" "2" "3"
> f
[1] 1 2 3 <NA>
Levels: 1 2 3
> is.na(f)
[1] FALSE FALSE FALSE TRUE
Zakłada się, że jest to sposób, za pomocą którego można odróżnić NA
i "NA"
w sposób, w jaki czynnik jest drukowany, ponieważ drukuje bez cudzysłowów, nawet dla etykiet/poziomów znaków:
> f2 <- factor(c("NA",NA))
> f2
[1] NA <NA>
Levels: NA
> is.na(f2)
[1] FALSE TRUE
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-27 15:29:27