R での修正方法: 無効な因子レベル、na が生成される


R を使用するときに表示される警告メッセージは次のとおりです。

 Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

この警告は、定義されたレベルとしてまだ存在しない R の因子変数に値を追加しようとすると発生します。

次の例は、この警告に実際に応答する方法を示しています。

警告を再現する方法

R に次のデータ フレームがあるとします。

 #create data frame
df <- data. frame (team=factor(c('A', 'A', 'B', 'B', 'B')),
                 dots=c(99, 90, 86, 88, 95))

#view data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95

#view structure of data frame
str(df)

'data.frame': 5 obs. of 2 variables:
 $ team: Factor w/ 2 levels "A","B": 1 1 2 2 2
 $ points: num 99 90 86 88 95

チーム変数は「A」と「B」の 2 つのレベルを持つ因子であることがわかります。

ここで、 teamの値「C」を使用して、データ フレームの最後に新しい行を追加しようとするとします。

 #add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

値「C」がチーム変数の因子水準としてまだ存在しないため、警告メッセージが表示されます。

これは単なる警告メッセージであり、R は引き続きデータ フレームの末尾に改行を追加しますが、「C」の代わりにNA値を使用することに注意することが重要です。

 #view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 NA 100

警告を回避する方法

無効な因子レベルの警告を回避するには、まず因子変数を文字変数に変換する必要があります。次に、新しい行を追加した後、因子変数を因子変数に戻すことができます。

 #convert team variable to character
df$team <- as. character (df$team)

#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

#convert team variable back to factor
df$team <- as. factor (df$team)

#view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 C 100

データ フレームの末尾に改行を正常に追加し、警告メッセージが表示されないことに注意してください。

また、値「C」が因子水準としてチーム変数に追加されたことも確認できます。

 #view structure of updated data frame
str(df)

'data.frame': 6 obs. of 2 variables:
 $ team: Factor w/ 3 levels "A","B","C": 1 1 2 2 2 3
 $points: chr "99" "90" "86" "88" ...

追加リソース

次のチュートリアルでは、R の他の一般的なエラーを修正する方法について説明します。

R での修正方法: 引数に異なる行数が含まれる
R での修正方法: 未使用の引数を選択する際のエラー
R での修復方法: 置換の長さはゼロです

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です