Как исправить в 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

Теперь предположим, что мы пытаемся присвоить значение 10 каждой строке в столбце B, где соответствующее значение в столбце A равно 5:

 #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, и сообщение об ошибке явно сообщает нам, что пропущенные значения не допускаются в присвоениях индексов кадров данных .

Как избежать ошибки

Есть два способа избежать этой ошибки.

1. Используйте оператор %in%

Один из способов избежать этой ошибки — использовать оператор %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

Обратите внимание, что каждой строке в столбце B присвоено значение 10, где соответствующее значение в столбце A равно 5, и мы не получаем никаких ошибок.

2. Используйте is.na()

Другой способ избежать этой ошибки — использовать функцию 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

Опять же, мы можем присвоить значение 10 каждой строке в столбце B, где соответствующее значение в столбце A равно 5, и мы не получим ошибок.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:

Как исправить в R: аргументы содержат разное количество строк
Как исправить в R: ошибка выбора неиспользуемых аргументов
Как восстановить в R: замена имеет нулевую длину

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *