R での修正方法: 添え字付き代入では欠損値は許可されません


R の使用時に発生する可能性のあるエラー メッセージは次のとおりです。

 Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

このエラーは通常、ある列に別の列の値を使用して値を割り当てようとしたが、 NA値が存在する場合に発生します。

次の例は、このエラーを実際に解決する方法を示しています。

エラーを再現する方法

R で次のデータ フレームを作成するとします。

 #create data frame
df <- data. frame (A=c(3, 4, 4, NA, 5, 8, 5, 9),
                 B=c(12, 13, 7, 7, 12, 11, 15, 7))

#view data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7

ここで、列 A の対応する値が 5 である列 B の各行に値 10 を割り当てようとするとします。

 #attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10

Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

列 A に NA 値があるため、エラーが発生します。エラー メッセージは、データ フレームの添字割り当てでは欠損値が許可されていないことを明示的に示しています。

エラーを回避する方法

このエラーを回避するには 2 つの方法があります。

1. %in% 演算子を使用する

このエラーを回避する 1 つの方法は、代入を実行するときに%in%演算子を使用することです。

 #assign column B a value of 10 where A is equal to 5
df[df$A %in% 5,]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

列 A の対応する値が 5 である列 B の各行に値 10 が割り当てられており、エラーは発生しないことに注意してください。

2. is.na() を使用する

このエラーを回避するもう 1 つの方法は、代入を実行するときにis.na()関数を使用することです。

 #assign column B a value of 10 where A is equal to 5
df[!is. na (df$A) & df$A == 5, ]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

ここでも、列 A の対応する値が 5 である列 B の各行に値 10 を割り当てることができ、エラーは発生しません。

追加リソース

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

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

コメントを追加する

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