53

レベル「Y」と「N」の SMOKE という名前の因子があります。欠損値は NA に置き換えられました (初期レベル「NULL」から)。ただし、要因を表示すると、次のようになります。

head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N

R が と表示NAされるのはなぜ<NA>ですか? そして、違いはありますか?

4

3 に答える 3

53

を扱っているfactors場合、NAが山括弧 ( <NA>) で囲まれている場合、それは実際には NA であることを示します。

NA括弧がない場合それはNA ではなく、ラベルが"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

@Arun の質問に答えるように編集します。

R"NA"は、値が 2 文字の文字列と実際の欠損値を区別しようとしているだけNA です。例:dfdf$y

df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)

NA の 2 つの異なるスタイルに注意してください。

> df
  x    y
1 1    a
2 2 <NA>
3 3    c
4 4   NA

ただし、「df$y」だけを見ると

[1] "a"  NA   "c"  "NA"

ただし、引用符を削除すると (data.frame をコンソールに出力するときに表示されるものと同様):

print(df$y, quote=FALSE)
[1] a    <NA> c    NA  

NAしたがって、角度付きブラケットを介しての区別が再びあります。

于 2013-04-27T15:27:39.097 に答える
-1

おそらく 1 つの例外は data.table かもしれません。文字フィールドでは < NA > と表示され、数値フィールドでは NA と表示されるようです。注: < NA > に余分なスペースを追加しました。そうしないと、この Web ページに適切に表示されませんでした。

library("data.table")

y<-data.table(a=c("a","b",NA))

print(y)
      a
1:    a
2:    b
3: < NA >

factor(y$a)

[1] a    b    < NA >

Levels: a b

## we enter a numeric argument

y<-data.table(a=c(1,2,NA))

print(y)
    a
1:  1
2:  2
3: NA

factor(y$a)

[1] 1    2    < NA >

Levels: 1 2
于 2018-12-19T21:31:51.290 に答える