Одно сообщение об ошибке, с которым вы можете столкнуться при использовании 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
A B
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
A B
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, и мы не получаем никакой ошибки.
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
A B
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: замена имеет нулевую длину