2013-06-14 18 views
10

Mam następujący ramkę danych:R czynnikiem NA vs <NA>

df1 <- data.frame(id = 1:20, fact1 = factor(rep(c('abc','def','NA',''),5))) 
df1 
    id fact1 
1 1 abc 
2 2 def 
3 3 NA 
4 4  
5 5 abc 
6 6 def 
7 7 NA 
8 8  
9 9 abc 
10 10 def 
11 11 NA 
12 12  
13 13 abc 
14 14 def 
15 15 NA 
16 16  
17 17 abc 
18 18 def 
19 19 NA 
20 20  

Próbuję ujednolicić wszystkie wartości brakujących ('' i NA), aby stać NA użytkownika. Jednak kiedy używam tego:

df1[df1 == ''] <- NA 

wydaje się, że istnieją 2 klasy NA.

df1 
    id fact1 
1 1 abc 
2 2 def 
3 3 NA 
4 4 <NA> 
5 5 abc 
6 6 def 
7 7 NA 
8 8 <NA> 
9 9 abc 
10 10 def 
11 11 NA 
12 12 <NA> 
13 13 abc 
14 14 def 
15 15 NA 
16 16 <NA> 
17 17 abc 
18 18 def 
19 19 NA 
20 20 <NA> 

Czy istnieje metoda najlepszej praktyki radzenia sobie z tą sytuacją?

+3

'NA = "NA"'. Może uruchomienie 'is.na (df1 $ fact1)' może być pouczające? – joran

+2

Zauważ również, że 'liczba całkowita',' znak', 'logiczna',' czynnik' pokazują inaczej wartości "NA". Na przykład. wyświetl tę informację.frame: 'data.frame (w = c (" a "," b ", NA), x = as.integer (c (1,2, NA)), y = as.factor (c (1,2, NA)), z = as.logical (c (TRUE, FALSE, NA))) ' – Kalin

Odpowiedz

8

Rozszerzając komentarzu Jøran za:

df1 <- data.frame(id = 1:5, fact1 = factor(c('abc','def', NA, 'NA',''))) 
> df1 
    id fact1 
1 1 abc 
2 2 def 
3 3 <NA> 
4 4 NA 
5 5  

df1[df1 == '' | df1 == 'NA'] <- NA 
> df1 
    id fact1 
1 1 abc 
2 2 def 
3 3 <NA> 
4 4 <NA> 
5 5 <NA>