Как исправить: количество элементов для замены не кратно длине замены


Одна ошибка, с которой вы можете столкнуться в R:

Warning message:
 number of items to replace is not a multiple of replacement length

Эта ошибка возникает, когда вы пытаетесь заменить определенное количество элементов в столбце вектора или фрейма данных (допустим, 3 элемента) другим количеством элементов (допустим, 6 элементов).

В этом руководстве рассказывается, как именно исправить эту ошибку.

Как воспроизвести ошибку

Предположим, у нас есть следующий фрейм данных в R с некоторыми пропущенными значениями в первом столбце:

#create data frame
df <- data.frame(a=c(3, NA, 7, NA, NA, 14),
 b=c(4, 4, 5, 12, 13, 18))

#view data frame
df

 a b
1 3 4
2 NA 4
3 7 5
4 NA 12
5 NA 13
6 14 18

Теперь предположим, что мы пытаемся заменить отсутствующие значения в первом столбце значениями во втором столбце:

#attempt to replace missing values in first column with values in second column
df$a[is.na(df$a)] <- df$b

Warning message:
In df$a[is.na(df$a)] <- df$b :
 number of items to replace is not a multiple of replacement length

Мы получаем ошибку, потому что мы попытались заменить 3 пропущенных значения в первом столбце всеми 6 значениями из второго столбца.

Как исправить ошибку

Самый простой способ исправить эту ошибку — просто использовать оператор ifelse() :

#replace missing values in column 'a' with corresponding values in column 'b'
df$a <- ifelse(is.na(df$a), df$b, df$a)

#view updated data frame
df

 a b
1 3 4
2 4 4
3 7 5
4 12 12
5 13 13
6 14 18 

Этот оператор ifelse() проверяет, является ли значение в столбце «a» пустым. Если это так, то оно заменяется соответствующим значением в столбце «b», в противном случае оно остается в покое.

Другой способ исправить эту ошибку — просто заменить все отсутствующие значения определенным числом:

#replace all missing values in column 'a' with zero
df$a[is.na(df$a)] <- 0

#view updated data frame
df

 a b
1 3 4
2 0 4
3 7 5
4 0 12
5 0 13
6 14 18

Используя этот метод, каждое отсутствующее значение в столбце «а» заменяется нулем.

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

Как исправить в R: NA, представленные Coercion
Как исправить в R: нижний индекс выходит за пределы
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта