Как исправить в 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: замена имеет нулевую длину